在IntelliJ IDEA中创建一个可执行的罐子

2022-09-03 08:36:28

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

无法从 jar 加载主类清单属性

如果我使用它来运行它,它可以完美地工作。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

为什么不添加到 jar 文件 MANIFEST 中。MF,但它在src中?Main-ClassMain-Class


答案 1

我遇到了同样的问题,并在Intellij auto填充清单路径的方式中发现了修复和/或错误。

INTELLIJ UI

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

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

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

默认情况下它的外观示例:

default intellij jar artifact settings

现在,这是更改后它应该是什么样子的:

fixed intellij artifact settings

手动修复以输入正确的清单。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/..)。

我正在使用OSX 10.9.2和IntelliJ版本12.1.6

希望有所帮助。


答案 2

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


推荐