为什么无法从JAR文件加载主类清单属性?


85

我以这种方式创建了一个JAR文件jar cf jar-file input-files。现在,我正在尝试运行它。运行它不起作用(找不到jre命令):

jre -cp app.jar MainClass

这也不起作用:

java -jar main.jar

(无法从main.jar加载Main-Class清单属性)。

我也发现

要运行打包为JAR文件的应用程序(1.2版-需要Main-Class清单头)

什么是“ Main-Class清单标头”?我如何创建它以及在哪里放置它?

Answers:


62

我不确定我是否相信您的症状:

  • 如果jre找不到该命令,则运行jre -cp app.jar应该给出相同的错误
  • 只需将JAR文件添加到类路径中,就不会给出您看到的错误

如果您执行以下操作,希望您会看到此错误:

java -jar app.jar

Main-Class标头需要放在JAR文件的清单中-这是有关其他必需库之类的内容的元数据。有关如何创建适当清单的信息,请参见Sun文档。基本上,您需要创建一个包含以下内容的文本文件:

Main-Class: MainClass

然后跑

jar cfm app.jar manifest.txt *.class

谢谢。有用。我使用创建了一个清单文件,Main-Class: MainClass然后使用您提供的命令创建了.jar文件。之后,我就可以运行我的程序了java -jar main.jar
罗马2010年

1
另一个选项是使用-e选项,不需要单独的文件。jar cfe app.jar MainClass *.class注:-e在JDK中添加6
pferate

35
  1. 设置类路径并编译

    javac -classpath“ C:\ Program Files \ Java \ jdk1.6.0_ updateVersion \ tools.jar” yourApp.java

  2. 创建manifest.txt

    主类:yourApp换行符

  3. 创建yourApp.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. 运行yourApp.jar

    java -jar yourApp.jar


9

您可以运行:

java -cp .;app.jar package.MainClass

如果JAR文件中没有清单,它对我有用。


我有:无法识别的选项:-cp。你能复习一下你的答案吗?因为我不是该命令要执行的操作。(java -cp。; app.jar包。MainClass)。这是一个命令,还是两个?
kenorb 2012年

1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… “ -cp。; app.jar”应该将您的app.jar文件添加到类路径,然后才能运行MainClass.main()方法( MainClass在“包”包中)。
戴尼乌斯

1
因此,在Linux上可能不存在该选项(-cp)(我的Java版本是v1.6.0_24,OpenJDK运行时环境(IcedTea6 1.11.3)(6b24-1.11.3-1ubuntu0.12.04.1))。
kenorb 2012年

“java命令test1.Main” Java的版本=>的Java的HotSpot(TM)64位服务器VM(构建20.1-B02,混合模式)作品
纽斯

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => OpenJDK 64位服务器VM(内部版本20.0-b12,混合模式)“ / usr / lib / jvm / java-6-openjdk 。-amd64 /斌/ java命令test1.Main”作品
纽斯


1

确保使用适当的清单文件正确创建了可运行JAR文件的最简单方法是使用Eclipse为您构建它。在Eclipse项目中,您基本上只需从菜单中选择File / Export,然后按照提示进行操作。

这样,您可以确定您的JAR文件是正确的,并且如果仍然存在问题,可以知道在其他地方查找。在FAQ中完整描述了该过程。如何为独立的SWT程序创建可执行的JAR文件?


感谢您Export在Eclipse IDE中使用。
Ninh Pham 2014年

0

我发现在NetBeans中也出现此错误。希望以下内容对您有所帮助。

  1. 确保当您转到“项目配置”时,设置要运行的主类。
  2. 进行构建或清理构建
  3. 将jar文件放在您想要的位置,然后尝试:在命令行中再次输入java -jar“ YourProject.jar”。

这是我遇到的问题,因为我在NetBeans中使用了其他“测试”程序,并且必须确保正确配置了Project配置的Run部分下的Main Class。

许多祝福,约翰·P


0

我在运行时遇到了相同的错误:
jar cvfm test.jar Test.class Manifest.txt

解决问题的方法是:
jar cvfm test.jar Manifest.txt Test.class

我的清单具有oracle docs中提供的入口点(确保文件末尾有换行符):
Main-Class:Test




0

如果在清单中完全指定了类路径,则可能需要使用Java运行时环境的最新版本。重新安装jre 8后,我的问题解决了。


0

如果使用eclipse,请尝试以下操作:1.右键单击项目->选择“导出”。2.在选择导出目标的位置选择Runnable Jar文件。3.输入jar的名称,然后选择“ Package required ...”(第二个单选按钮) ->完成

希望这可以帮助...!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.