使用Maven构建项目

问题描述 投票:1回答:2

我已经构建了我使用Maven在Netbeans中创建的项目。我想打开构建的.jar文件,但没有任何反应。我认为问题是,我必须在pom.xml文件中指定主类?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>My_Project_name</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<build>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
      <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox</artifactId>
      <version>2.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <version>10.10.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbyclient</artifactId>
        <version>10.10.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20171018</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>
</dependencies>
</project>

这也是我的主要课程的样子。

package com.myproject.My_Project_name;
import java.awt.Rectangle;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;


public class App {
     public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new OverviewScreen().setVisible(true);
            }
        });
    }
}

请帮忙!

java maven jar
2个回答
1
投票

您需要确保您的依赖项是最新的,并且您拥有处理项目所需的一切。解决此问题的最佳方法是启动一个新的maven项目并开始逐个添加每个依赖项,直到找到哪个依赖项是问题。

以下是应该工作的示例pom.xml ...今天。

pom.hml圆角:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.myproject</groupId>
  <artifactId>My_Project_name</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>My_Project_name</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derbyclient</artifactId>
        <version>10.10.1.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20171018</version>
    </dependency>

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.4</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1</version>
    </dependency>




  </dependencies>
</project>

所以主类看起来像这样:

package com.myproject.My_Project_name;
//import java.awt.Rectangle;
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.io.RandomAccessFile;


public class App {
     public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //error in commented line below
                //new OverviewScreen().setVisible(true);
                System.out.println("hello");
            }
        });
    }
}

因此,当您使用以下代码时,您似乎遇到了问题:

    new OverviewScreen().setVisible(true);

然后在将项目导出到.jar之前,请确保选择应用程序入口点的主类。在我的情况下,导出到.jar的向导将它放在向导的最后一页上,您必须单击下一步直到看到它。对于此示例,请选择App.java(而不是AppTest.java)作为主要内容。

指定程序的主入口点也可以通过其他方式完成。如果要确保它正常工作,请检查程序是否在命令提示符下显示:

C:\Users\Me\Documents>java -jar myProjectName.jar

将项目导出为.jar后,尝试在命令提示符下执行它。

C:\Users\Me\Documents>java -cp myProjectName.jar com.myproject.My_Project_name.App

如果您的依赖项正常工作,并且导出了.jar并且正确选择了主文件,则应该通过命令行输出结果:

hello

从运行.jar。当您在.jar文件的包含文件夹中时,还要确保输入命令。


0
投票

我现在已经解决了这个问题。我将以下代码添加到我的pom.xml文件中,现在它可以正常工作。

 <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>Path.To.My.Mainfile</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>
© www.soinside.com 2019 - 2024. All rights reserved.