【问题标题】:Why is my fat JAR not running on different PCs - main class not found?为什么我的胖 JAR 不能在不同的 PC 上运行 - 找不到主类?
【发布时间】:2020-02-19 15:12:39
【问题描述】:

我使用 IntelliJ 构建了一个 javaFX 工件。我的第一个问题是在应用程序类框中,当我在搜索框中搜索时,它没有自动检测到我的主类,甚至没有建议任何类作为主类。我看到这是 IntelliJ 的一个错误,在 StackOverflow 上的某个地方,我只是手动输入了我的 packageName.Main in the application class box.

我有两个依赖项被提取到这个output root. 中构建工件的输出看起来像this.

然后在重建项目后,JAR 在我的 PC 上运行 100%,即使我将 JAR 移动到另一个目录,它也可以 100% 运行。

所以我把这个 JAR (Swansong.jar) 复制到了我的另一台电脑上,当我双击它时,什么也没发生。当我在cmd中运行它时: java -jar Swansong.jar我收到了这个错误:

Error: Could not find or load main class swansong.Main
Caused by: java.lang.ClassNotFoundException: swansong.Main

我阅读了有关清单文件的信息,但在我的项目中的任何地方都找不到清单文件,但是如果我提取 JAR 文件,生成的清单文件看起来像 this。谁能帮助我,为什么 JAR 可以在一台 PC 上运行,而不能在另一台 PC 上运行?我该如何解决这个问题?

更新: This是我的jar文件的内容,this是jar文件里面swansong目录的内容。

更新 2: 我觉得我好笨。我的主 PC 运行 jdk8,而我的另一台 PC 运行 jdk11。并且 JavaFX 不包含在 jdk11 中。所以我认为这是问题所在,但还不能 100% 确定。将测试并查看。有什么解决方法吗?

【问题讨论】:

  • 尝试从swansong的父文件夹运行java -jar swansong.Swansong.jar
  • 如果您的 jar 中没有清单文件,它也不会在您的第一台电脑上运行。您是先在 IDE 中运行它,现在才通过单击它来运行它吗?
  • @Eugen 我只是将JAR文件复制到另一台PC,所以目录结构如下:/Downloads/Swansong.jar
  • @Stultuske 我在我的 IDE 上运行它,工作,然后只需双击 jar 文件,也工作。只有当复制到其他电脑时它不起作用。我注意到 jar 中有一个清单文件,正如您在我的上一个屏幕截图中看到的那样
  • @Stultuske 我的项目结构(在 IDE 中)中没有清单文件,但 jar 中有一个

标签: java intellij-idea javafx jar executable-jar


【解决方案1】:

任何可执行的 jar 文件都需要有指向主类的清单文件。

-JAR File
 \---META-INF
   \--MANIFEST.MF

在 MANIFEST.MF 中,你应该这样引入主类:

    Main-Class: com.mycompany.MainClass
    Class-Path: . 

com.mycompany.MainClass 应替换为适当的路径(主类的完全限定名称)

【讨论】:

  • 感谢您的回答。我的 jar 文件中有一个清单文件,其中包含 Main-Class: swansong.Main 这是我的完全限定名。
  • 依赖 jar 文件(路径)在哪里?您是否在清单中介绍过它们?
  • 我没有在清单中介绍它们。我的清单的屏幕截图是我的整个清单,但我在源代码中引用了 Jsoup 和 Jfoenix 并将其添加到输出布局中。但清单中没有任何内容。
  • 没有在我的清单中,类路径是空的,我不知道它应该是什么
【解决方案2】:

我不想承认,但问题的解决方案一直盯着我看,我真的很尴尬。我使用 Java 8 开发程序。目标 PC 使用的是 Java 11,我从没想过检查 JDK 版本,因为我以为我在两台 PC 上都使用了 JDK8。

JavaFX 包含在 JDK8 中,但不包含在 JDK11 中。使用较新的 JDK 版本时,应将其作为外部库添加到项目中。我刚刚使用 JDK8 运行程序,一切正常 100%。不过感谢您的回答和 cmets,我学到了很多关于试图解决这个问题的清单和类路径,所以努力没有白费!

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多