我已经构建了我使用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);
}
});
}
}
请帮忙!
您需要确保您的依赖项是最新的,并且您拥有处理项目所需的一切。解决此问题的最佳方法是启动一个新的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文件的包含文件夹中时,还要确保输入命令。
我现在已经解决了这个问题。我将以下代码添加到我的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>