无法加载Main-Class清单属性

时间:2010-10-21 21:06:34

标签: java jar

我知道这是一个非常常见的问题,但我尝试使用谷歌搜索并没有得到任何有用的结果。 我正在尝试用我的“Main.class”文件制作一个jar(用NetBeans制作,但我不想用它制作jar)

我跑了这个命令:

D:\NetBeans\trovanum3\build\classes\trovanum3>jar cf trovanum.jar *.class

在该文件夹中生成了一个.jar文件。我认为那会有效,但它不会运行。

我尝试用存档开启器打开jar文件,里面是“Main.class”文件和包含名为“MANIFEST.MF”的文件的“META-INF”文件夹 该文件包含:

Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)

可能是什么问题?

6 个答案:

答案 0 :(得分:3)

您需要在清单文件中指定Main-Class属性:Understanding the Manifest。这通常意味着您需要自己添加清单文件,而不是让它自动添加。

顺便说一下,你总是可以在没有这样的清单的情况下运行你的代码:

java -cp path/to/myJar.jar my.package.MyClass 

当你想像这样运行它时需要清单:

java -jar path/to/myJar.jar

答案 1 :(得分:2)

创建一个名为well的文件,真的,但我们称之为manifest.txt

打开manifest.txt并输入:

Main-Class: Main

然后创建你的jar,输入

jar cfm trovanum.jar manifest.txt *.class

它应该运行良好。

答案 2 :(得分:1)

提取mainifest文件。

添加一行,如下所示:

Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)
Main-Class: Main

确保最后有两个换行符。

更新jar文件。您可以使用WinRAR,7-zip等编辑jar文件中的Manifest,或者您可以删除原始jar(在解压缩和编辑之后)然后运行

jar -cmf MANIFEST.MF trovanum.jar *.class

然后它会在jar中使用你新修改的清单。

答案 3 :(得分:1)

您可以使用jar-e选项指定入口点,即主要类。例如:

D:\NetBeans\trovanum3\build\classes> jar cfe trovanum.jar trovanum3.Main trovanum3\*.class

如果那就是你需要的全部内容,那么就可以省去清单。请注意,您的问题中引用的工作目录一个。否则,Main类是在jar的顶层创建的,而不是在反映它应该驻留的包的目录中创建的。 jar -tvf应该显示如下内容:

  0 Thu Oct 21 22:34:30 BST 2010 META-INF/
 80 Thu Oct 21 22:34:30 BST 2010 META-INF/MANIFEST.MF
488 Thu Oct 21 22:18:24 BST 2010 trovanum3/Main.class
  

-e

     

将入口点设置为应用程序   独立的切入点   应用程序捆绑到可执行文件   jar文件。使用此选项   创建或覆盖Main-Class   清单文件中的属性值。   此选项可在使用期间使用   创建jar文件或更新时   jar文件。此选项指定   应用程序入口点没有   编辑或创建清单文件。

答案 4 :(得分:1)

创建可执行jar(而不是普通的jar文件)。您在导出jar文件时在eclipse中获得此选项。我遇到了同样的问题,一旦我创建了可执行jar就解决了。

创建批处理文件: java -jar“abc.jar”..

答案 5 :(得分:0)

您需要在jar的清单中设置Main-Class属性。有关详细信息,请参阅下面的java教程链接。

http://download.oracle.com/javase/tutorial/deployment/jar/appman.html