在IntelliJ IDEA中创建一个可删除的jar

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/,然后单击"确定".

默认情况下的示例:

默认的intellij jar工件设置

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

修复了intellij工件设置

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

希望有所帮助.


Jun*_*san 0

重要规则之一是清单文件必须以换行符或回车符结尾。如果不存在,请立即添加。