在IntelliJ IDEA中创建一个可删除的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 

但是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

我遇到了同样的问题,发现了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/来删除自动填充路径,然后单击“确定”。

默认情况下的示例:

默认的intellij jar工件设置

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

修复了intellij工件设置

手动修复输入正确的MANIFEST.MF文件

在IntelliJ项目中,打开.idea \ artifacts \ _jar.xml

确保它包含

     

一旦执行此操作,您可能需要重新加载intelliJ,以便它接收对.xml文件的更改

对我来说,它发生在maven项目中,其中存在不同的结构(即src / main / java / ..)。

我使用OSX 10.9.2与IntelliJ版本12.1.6

希望有所帮助。

其中一个重要规则是Manifest文件必须以新行或回车符结束。 如果不存在则立即添加。