繁体   English   中英

运行使用Gradle构建的JAR文件时,“没有主清单属性”

[英]'No main manifest attribute' while running JAR file built with Gradle

我使用Gradle编写了一个小型Java应用程序来构建它。 该应用程序来自本教程 ,包含2个类:HelloWorld(主类)和Greeter。 build.gradle文件包含2个部分(以及其他部分,目前不相关):

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运行它时,我得到错误No main manifest attribute 在StackOverflow上找到的解决方案之一建议运行该文件

java -cp HelloWorld.jar hello.HelloWorld

要么

java -cp HelloWorld.jar HelloWorld

第一个返回Could not find or load main class HelloWorld ,第二个返回java.lang.NotClassDefFoundError" org/joda/time/LocalTime存档包含以下文件:

  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运行应用程序没有任何问题。

发生此错误的原因是在运行hello.HelloWorld未将org.joda.time.LocalTime添加到类路径中。

  1. 它可以使用classpath设置gradle rungradle run
  2. 您可以使用插件在jar中包含此依赖项。
  3. 或者使用distZip任务准备分发,解压缩并使用sh或bat脚本运行准备好的工件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM