【问题标题】:JAR files created by IntelliJ IDEA do not runIntelliJ IDEA 创建的 JAR 文件不运行
【发布时间】:2016-05-17 12:25:22
【问题描述】:

我在 IntelliJ 中编写了一个跨越几个类的程序,当我在 IDE 中测试它时它运行良好。但是,每当我按照教程将我的项目变成 .jar 可执行文件时,它都不会运行。

双击out文件夹中的文件并显示“无法启动Java JAR文件”projectName.jar“时不运行。

从终端打开它时,我收到错误“找不到或加载主类”。我用“$ java -jar projectName.jar”

我按照以下步骤操作:

  1. 打开项目结构、工件并单击 (+)。
  2. 在 JAR 下,来自具有依赖关系的模块。
  3. 使用我的 main 方法指向类,然后单击“确定”。
  4. 点击应用和确定退出。
  5. 然后我关闭项目结构并打开 Build 然后 Build Artifacts...
  6. 然后我点击构建。
  7. 导航到 ~/IdeaProjects/projectName/out/artifacts/projectName_jar/projectName.jar

然后我会尝试运行它,但它没有运行。我的项目既有 GUI,也可以从命令行运行。当我在终端中编译 main 方法时,它运行良好,但我需要一个 JAR 文件。我不确定我应该在问题中包含什么,因为我确定我的代码是不相关的。我也使用 Maven,不确定这是否相关。在构建 JAR 之前,我应该做或添加到我的项目中的其他事情吗?

【问题讨论】:

    标签: java intellij-idea jar


    【解决方案1】:

    这可能是 Manifest 在错误位置创建的结果。

    首先确保它在src/main/resources/META-INF/MANIFEST.MF

    (Intellij 有时会错误地将其放入 /src/main/java/META-INF/MANIFEST.MF)

    然后确保 jar 在 src 目录中而不是在 /java 或 /resources 中寻找 META-INF。这意味着:

    当你设置文件>项目结构>工件>+>JAR kbd>>从具有依赖关系的模块... 那么您的 META-INF/MANIFEST.MF 目录 应该以 src 结尾。示例:

    ONLY C:\Users\User\StudioProjects\Project\src\
    NOT THE PREPOPULATED C:\Users\User\StudioProjects\Project\src\main\java
    

    如果您的 Project Structure jar 已经设置好,请将 Manifest File 路径更改为:

    C:\Users\User\StudioProjects\Project\src\META-INF\MANIFEST.MF
    INSTEAD OF C:\Users\User\StudioProjects\Project\src\main\java\META-INF\MANIFEST.MF
    

    【讨论】:

      【解决方案2】:

      您需要确保已设置 Main-Class 属性。检查这一点的一种方法是使用 Zip 实用程序打开 Jar 并查找 META-MF/MANIFEST.MF 提取或使用记事本、记事本++ 或任何文档阅读器打开该文件。如果“Main-Class”不在它们中或设置为正确的主类,您将收到您收到的错误。看到 IntelliJ 教程,它在设置工件发布时有一个 Main-Class 字段。我已将下面的链接添加到 IntelliJ 页面。

      IntelliJ Creating an Artifact Tutorial

      【讨论】:

      • MANIFEST.MF 文件是由 IntelliJ 创建的,所以我认为它是正确的。 Main-Class是正确的,但是只有2行,一个是“Manifest-Version: 1.0”,另一个是“Main-Class: projectName”应该还有别的吗?
      • 可能。 Main-Class 属性必须是完全限定的域。即,如果您的课程在某个或多个包中....com.packagename.ClassName。请参阅Package Fundamentals 第 7.5 节。使用包成员:限定名称。因此,如果您没有包,则该属性只是具有您要运行的主要方法的类的名称。这是 Oracles 网站Setting an Application's Entry Point 对此的最佳描述
      • @EricChan 我忘了在我的评论中标记你。新堆叠。
      猜你喜欢
      • 2019-09-28
      • 2013-06-06
      • 2016-04-11
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2013-03-21
      • 2013-11-19
      • 2023-03-13
      相关资源
      最近更新 更多