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

Posted

技术标签:

【中文标题】为啥无法从 JAR 文件加载主类清单属性?【英文标题】:Why has it failed to load main-class manifest attribute from a JAR file?为什么无法从 JAR 文件加载主类清单属性? 【发布时间】:2011-02-05 04:45:39 【问题描述】:

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

jre -cp app.jar MainClass

这也不起作用:

java -jar main.jar

(无法从 main.jar 加载主类清单属性)。

我也发现了

运行打包为 JAR 文件(1.2 版——需要 主类清单头)

什么是“主类清单标头”?如何创建它以及将它放在哪里?

【问题讨论】:

【参考方案1】:

我收到了这个错误,这是因为我的参数顺序错误:

正确

java maui.main.Examples tagging -jar maui-1.0.jar 

错误

java -jar maui-1.0.jar maui.main.Examples tagging 

【讨论】:

这可能只是一个bsd问题,我很确定我最近用另一种方式完成了。【参考方案2】:

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

希望这会有所帮助...!

【讨论】:

【参考方案3】:

如果您的类路径在清单中完全指定, 也许您需要最新版本的 java 运行时环境。 当我重新安装 jre 8 时,我的问题得到了解决。

【讨论】:

【参考方案4】:

我遇到了同样的问题。此 unix 命令无法找到主类。这是因为运行时和编译时 JDK 版本不同。更改java编译器版本后通过eclipse制作jar。以下链接帮助了我。

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

尝试运行这一步之后创建的jar,然后执行

【讨论】:

【参考方案5】:

    设置类路径并编译

    javac -classpath "C:\Program Files\Java\jdk1.6.0_updateVersion\tools.jar" yourApp.java

    创建清单.txt

    主类:yourApp 换行

    创建你的App.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

    运行 yourApp.jar

    java -jar yourApp.jar

【讨论】:

【参考方案6】:

试试

java -cp .:mail-1.4.1.jar JavaxMailhtml 

不需要manifest 文件。

【讨论】:

【参考方案7】:

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

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

我的清单具有 oracle 文档中给出的入口点(确保文件末尾有一个换行符):Main-Class: Test

【讨论】:

我觉得文件末尾需要换行符很有趣。感谢您为我省去了一些麻烦!【参考方案8】:

我发现我在 NetBeans 中也遇到了这个错误。 我希望以下内容对您有所帮助。

    确保在进入项目配置时设置要运行的主类。 进行构建或清理构建 将 jar 文件放在您希望的位置,然后在命令行再次尝试:java -jar "YourProject.jar"。

这是我遇到的问题,因为我在 NetBeans 中使用了其他“测试”程序,我必须确保项目配置的运行部分下的主类设置正确。

许多祝福, 约翰·P

【讨论】:

【参考方案9】:

你可以运行:

java -cp .;app.jar package.MainClass

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

【讨论】:

我已经:无法识别的选项:-cp。你能回顾一下你的答案吗?因为我不知道这个命令试图做什么。 (java -cp.;app.jar package.MainClass)。这是一个命令,还是两个? docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… "-cp.;app.jar" 应该将您的 app.jar 文件添加到类路径中,而不是您可以运行 MainClass.main() 方法(MainClass 在“包”包中) . 所以可能在 Linux 上这个选项 (-cp) 不存在(我的是 java v1.6.0_24,OpenJDK Runtime Environment (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04 .1)). java -version => Java HotSpot(TM) 64-Bit Server VM(build 20.1-b02,混合模式)“java -cp .test1.Main”工作 /usr/lib/jvm/java-6-openjdk-amd64/bin/java -version => OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) "/usr/lib /jvm/java-6-openjdk-amd64/bin/java -cp .test1.Main" 有效【参考方案10】:

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

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

如果您运行,我希望您会看到此错误:

java -jar app.jar

Main-Class 标头需要在 JAR 文件的清单中 - 这是关于其他所需库之类的元数据。请参阅Sun documentation 了解如何创建适当的清单。基本上你需要创建一个文本文件,其中包含这样一行:

Main-Class: MainClass

然后运行

jar cfm app.jar manifest.txt *.class

【讨论】:

谢谢。有用。我使用Main-Class: MainClass 创建了一个清单文件,然后使用您提供的命令创建了 .jar 文件。之后我可以通过java -jar main.jar 运行我的程序。 另一个选项是使用 -e 选项,不需要单独的文件。 jar cfe app.jar MainClass *.class 注意:-e 是在 JDK 6 中添加的。【参考方案11】:

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

这样,您可以确定您的 JAR 文件是正确的,并且如果仍然存在问题,您会知道在别处查找。 FAQ How do I create an executable JAR file for a stand-alone SWT program? 中完整描述了该过程。

【讨论】:

感谢您在 Eclipse IDE 中使用 Export

以上是关于为啥无法从 JAR 文件加载主类清单属性?的主要内容,如果未能解决你的问题,请参考以下文章

java -jar XXX.jar 没有主清单属性以及找不到或无法加载主类的问题

java -jar jar包,运行报错没有主清单和无法加载主类

无法使用 Jar 文件找到或加载主类

我已经使用 IntelliJ 创建了一个 jar,但是当我尝试运行该 jar 时,我收到一个错误,因为无法加载主类清单 [重复]

由于无法加载主类错误而无法运行 JAR 文件

java运行jar命令提示没有主清单属性和找不到主类