我正在使用IntelliJ IDEA 12.1.3 . 我有一个模块,我正在尝试按照here给出的步骤将其转换为jar . 我构建了jar文件,然后将jar文件移动到D:/ . 如果我尝试运行此jar,我会收到以下消息:
无法从jar加载Main-Class清单属性
如果我使用 java -classpath jar com.code.TestCase
运行它,它可以很好地工作 .
为什么会这样?我使用IntelliJ IDEA创建了jar . 在那个jar中,它包含了我添加的所有外部库的所有代码 .
在src清单文件中:
Manifest-Version: 1.0
Main-Class: com.code.TestCase
但是jar的清单文件内容是:
Manifest-Version: 1.0
Build-Jdk: 1.6.0
Built-By: ubuntu
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Name: org.apache.log4j
Implementation-Vendor: "Apache Software Foundation"
Implementation-Title: log4j
Implementation-Version: 1.2.15
为什么 Main-Class
没有添加到jar文件MANIFEST.MF中,但它在src中有 Main-Class
?
3 回答
我遇到了同样的问题,并发现了Intellij auto如何填充清单路径的修复和/或错误 .
INTELLIJ UI
创建工件以创建jar文件时,IntelliJ auto会填充当前清单所在的路径 .
即在工件创建页面中选择Main-Class后,Intellij将自动添加以下路径\ src \ java \ META-INF \ MANIFEST.MF . 由于某种原因,构建命令永远不会采用上面提到的MANIFEST.MF文件 . 它从头开始创建一个没有Main-Class定义,导致“无法加载Main-Class”
如果使用IntelliJ UI来创建jar工件;通过将自动填充路径更改为
/$PROJECT_DIR/src/
来删除它,然后单击“确定” .默认情况下的示例:
现在这是改变之后的样子:
MANUAL FIX TO ENTER CORRECT MANIFEST.MF FILE
在IntelliJ项目中,打开.idea \ artifacts \ _jar.xml
确保它包含
一旦执行此操作,您可能需要重新加载intelliJ,以便它接收对.xml文件的更改
对我来说,它发生在maven项目中,其中存在不同的结构(即src / main / java / ..) .
我使用的是带有IntelliJ版本12.1.6的OSX 10.9.2
希望有所帮助 .
其中一个重要规则是Manifest文件必须以新行或回车符结束 . 如果不存在则立即添加 .
可能是这个博客会帮助你 .
http://javarevisited.blogspot.in/2013/01/how-to-fix-failed-to-load-main-class-manifest-attribute-jar-java-eclipse.html