在IntelliJ IDEA中创建可执行jar

时间:2013-06-10 13:10:50

标签: java jar intellij-idea executable-jar

我正在使用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 个答案:

答案 0 :(得分:49)

我遇到了同样的问题,并发现了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/,然后单击“确定”。

默认情况下的示例:

default intellij jar artifact settings

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

fixed intellij artifact settings

手动修复输入正确的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>

执行此操作后,您可能需要重新加载intelliJ,以便了解.xml文件的更改

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

我正在使用带有IntelliJ版本12.1.6的OSX 10.9.2

希望有所帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)