mut*_*thu 14 java jar intellij-idea executable-jar
我正在使用IntelliJ IDEA 12.1.3.我有一个模块,我正在尝试按照此处给出的步骤将其转换为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
Run Code Online (Sandbox Code Playgroud)
但是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
Run Code Online (Sandbox Code Playgroud)
为什么Main-Class没有在jar文件中添加MANIFEST.MF,但它Main-Class在src中有?
小智 51
我遇到了同样的问题,并发现了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/,然后单击"确定".
默认情况下的示例:

现在这是改变之后的样子:

手动修复输入正确的MANIFEST.MF文件
在IntelliJ项目中,打开.idea\artifacts\_jar.xml
确保它包含
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" />
</element>
Run Code Online (Sandbox Code Playgroud)
一旦执行此操作,您可能需要重新加载intelliJ,以便它接收对.xml文件的更改
对我来说,它发生在maven项目中,其中存在不同的结构(即src/main/java/..).
我使用的是带有IntelliJ版本12.1.6的OSX 10.9.2
希望有所帮助.