首页 文章

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

提问于
浏览
14

我正在使用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

    我遇到了同样的问题,并发现了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

    MANUAL FIX TO ENTER CORRECT MANIFEST.MF FILE

    在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

    希望有所帮助 .

  • 0

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

相关问题