使用Gradle构建的JAR文件运行时出现“没有主清单属性”的错误。
使用Gradle构建的JAR文件运行时出现“没有主清单属性”的错误。
我使用Gradle编写了一个小的Java应用程序进行构建。这个应用程序来自于这个教程,并包含两个类:HelloWorld(主类)和Greeter。build.gradle文件包含两个部分(以及其他部分,但目前不相关):
apply plugin: 'application' mainClassName = 'hello.HelloWorld'
和
dependencies { compile "joda-time:joda-time:2.2" }
(这是必要的,因为HelloWorld类导入了org.joda.time.LocalTime类)。我可以使用\"gradle build\"或者\"gradle run\"构建并运行应用程序。一切都很好,并且我得到了结果。然而,当我尝试使用\"java -jar HelloWorld.jar\"运行它时,我会收到\"没有发现主清单属性\"的错误。StackOverflow上找到的一个解决方案建议以以下方式运行文件:
java -cp HelloWorld.jar hello.HelloWorld
或
java -cp HelloWorld.jar HelloWorld
第一个返回\"无法找到或加载主类HelloWorld\",第二个返回\"java.lang.NotClassDefFoundError org/joda/time/LocalTime\"。JAR存档中包含以下文件:
0 Mon Jul 06 13:13:46 CEST 2015 META-INF/ 25 Mon Jul 06 13:13:46 CEST 2015 META-INF/MANIFEST.MF 0 Mon Jul 06 13:13:46 CEST 2015 hello/ 369 Mon Jul 06 13:13:46 CEST 2015 hello/Greeter.class 988 Mon Jul 06 13:13:46 CEST 2015 hello/HelloWorld.class
我不知道为什么Gradle不将关于主类的信息放入清单文件中。你有什么建议吗?这段代码直接来自于教程,所以应该没问题,但事实并非如此。我重复,通过gradle运行应用程序没有问题。
admin 更改状态以发布 2023年5月21日