为啥无法从 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包,运行报错没有主清单和无法加载主类
我已经使用 IntelliJ 创建了一个 jar,但是当我尝试运行该 jar 时,我收到一个错误,因为无法加载主类清单 [重复]