有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在IntelliJ IDEA中创建一个可执行的jar

我正在使用IntelliJ IDEA 12.1.3。我有一个模块,我正试图按照here给出的步骤将其转换成一个jar。我构建了jar文件,并将jar文件移动到D:/。如果我尝试运行这个jar,我会收到以下消息:

Failed to load Main-Class manifest attribute from jar

如果我使用java -classpath jar com.code.TestCase运行它,它会运行得非常好

为什么会这样?我用IntelliJ创意制作了这个罐子。在这个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文件清单中。MF,但它在src中有Main-Class


共 (3) 个答案

  1. # 1 楼答案

    我也遇到过同样的问题,并在Intellij自动填充清单路径的方式中发现了一个修复和/或错误

    INTELLIJ UI

    创建工件以创建jar文件时,IntelliJ会自动填充当前清单所在的路径

    也就是说,在工件创建页面中选择主类后,Intellij将自动添加以下路径\src\java\META-INF\MANIFEST。MF。出于某种原因,build命令从未使用上述清单。MF文件。它从头开始创建一个没有主类定义的类,导致“无法加载主类”

    如果使用IntelliJ UI创建jar工件;通过将自动填充路径更改为/$PROJECT_DIR/src/并单击“确定”,删除了该路径

    默认情况下的外观示例:

    default intellij jar artifact settings

    这就是改变后的样子:

    fixed intellij artifact settings

    手动修复以输入正确的清单。MF文件

    在IntelliJ项目中,打开。创意\人工制品\罐子。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/)

    我正在使用OSX 10.9.2和IntelliJ 12.1.6版

    希望有帮助

  2. # 2 楼答案

    其中一条重要规则是,清单文件必须以新行或回车字符结尾。如果没有,现在就添加