对运行 JAR 文件时的 JavaFX NoClassDefFoundError 进行故障排除:如何在 Gradle 构建的 JAR 中包含 JavaFX?

Troubleshooting JavaFX NoClassDefFoundError When Running JAR File: How to Include JavaFX in Gradle-built JAR?

提问人:jamal1aarab 提问时间:8/17/2023 最后编辑:Robertjamal1aarab 更新时间:8/17/2023 访问量:33

问:

运行 Gradle 生成的 JAR for JavaFX 应用程序时遇到“NoClassDefFoundError”。Gradle 构建成功,但由于缺少“javafx/application/Application”类,JAR 执行失败。需要帮助在 JAR 构建中包含 JavaFX。

这是错误:

错误:找不到或加载主类 com.jamal1aarab.Main 原因:java.lang.NoClassDefFoundError: javafx/application/Application

这是我构建文件的一部分,我认为问题在于:

mainClassName = 'com.jamal1aarab.Main'

jar {
  manifest {
    attributes(
      'Main-Class': 'com.jamal1aarab.Main'
    )
  }
}

目录正确位于src\main\java\com\jamal1aarab

我使用主类和清单属性配置了我的 Gradle 构建。Gradle 构建和运行工作正常,但是当我尝试运行 JAR 时,弹出“NoClassDefFoundError”。我希望我的 JavaFX 应用程序能够从 JAR 顺利运行,就像通过 Gradle 一样。但是,缺少“javafx/application/Application”类导致 JAR 执行失败。

此外,我还看到许多讨论类似问题的 Stack Overflow 帖子。但是,大多数解决方案似乎都涉及修复路径,我已经确保在我的情况下是正确的。

java gradle jar 依赖项 noclassdeffounderror

评论

0赞 g00se 8/17/2023
你需要使用像影子这样的东西,但我认为在JavaFX的情况下,更聪明的钱会用在jpackage
0赞 8/18/2023
你究竟如何尝试运行这个罐子?根据您使用的 Java 版本,您可能需要添加模块路径和 javafx 模块。
0赞 jamal1aarab 8/19/2023
@CjY我使用 java -jar 名称正常运行它.jar因为我没有 javafx localy,所以我使用 gradle 添加它
0赞 g00se 8/19/2023
那是。。。混乱。如果你没有“本地”它,那么我根本看不到你是如何运行它的,因为它肯定不在你的罐子里(如你的错误所示)
0赞 jamal1aarab 8/19/2023
@g00se感谢您之前的建议,让我感到困惑的是 gradle 成功运行了该应用程序,但是当涉及到 jar 文件时,它确实可以工作

答: 暂无答案