为什么我的胖 JAR 在不同的 PC 上没有 运行 - 未找到主要 class?
Why is my fat JAR not running on different PCs - main class not found?
我使用 IntelliJ 构建了一个 javaFX 工件。我的第一个问题是在应用程序 Class 框中,它没有自动检测到我的主 class,甚至在我搜索时建议任何 classes 作为主 class搜索框。我在 Whosebug 的某处看到这是 IntelliJ 的一个错误,我只是手动输入 packageName.Main in the application class box.
我将两个依赖项提取到此 output root. The output of building the artifact looks like this.
然后在我的 PC 上重建项目后,JAR 运行s 100%,即使我将 JAR 移动到另一个目录,它也 100% 工作。
所以我将这个 JAR (Swansong.jar) 复制到我的另一台 PC 上,当我双击它时,没有任何反应。当我 运行 它在 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 is the contents of my jar file and this是jar文件里面swansong目录下的内容
更新 2:
我觉得我好笨。我的主电脑 运行s jdk8 和我的另一台电脑 运行s jdk11。并且 JavaFX 不包含在 jdk11 中。所以我认为这是问题所在,但还不能 100% 确定。将测试并查看。对此有任何解决方法吗?
任何可执行 jar 文件都需要有指向主文件的清单文件 class。
-JAR File
\---META-INF
\--MANIFEST.MF
在MANIFEST.MF中,你应该这样介绍主要的class:
Main-Class: com.mycompany.MainClass
Class-Path: .
com.mycompany.MainClass
应替换为适当的路径(您的主要 class 的完全限定名称)
我不想承认,但问题的解决方案一直盯着我看,我真的很尴尬。我用Java8来开发程序。目标 PC 使用 Java 11,我从没想过要检查 JDK 版本,因为我认为我在两台 PC 上都使用 JDK8。
JavaFX 包含在 JDK8 中,但不包含在 JDK11 中。使用较新的 JDK 版本时,应将其作为外部库添加到项目中。我刚刚将 JDK8 用于 运行 程序,一切正常 100%。不过,感谢您的回答和评论,我学到了很多关于清单和类路径的知识,试图解决这个问题,所以我的努力没有白费!
我使用 IntelliJ 构建了一个 javaFX 工件。我的第一个问题是在应用程序 Class 框中,它没有自动检测到我的主 class,甚至在我搜索时建议任何 classes 作为主 class搜索框。我在 Whosebug 的某处看到这是 IntelliJ 的一个错误,我只是手动输入 packageName.Main in the application class box.
我将两个依赖项提取到此 output root. The output of building the artifact looks like this.
然后在我的 PC 上重建项目后,JAR 运行s 100%,即使我将 JAR 移动到另一个目录,它也 100% 工作。
所以我将这个 JAR (Swansong.jar) 复制到我的另一台 PC 上,当我双击它时,没有任何反应。当我 运行 它在 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 is the contents of my jar file and this是jar文件里面swansong目录下的内容
更新 2: 我觉得我好笨。我的主电脑 运行s jdk8 和我的另一台电脑 运行s jdk11。并且 JavaFX 不包含在 jdk11 中。所以我认为这是问题所在,但还不能 100% 确定。将测试并查看。对此有任何解决方法吗?
任何可执行 jar 文件都需要有指向主文件的清单文件 class。
-JAR File
\---META-INF
\--MANIFEST.MF
在MANIFEST.MF中,你应该这样介绍主要的class:
Main-Class: com.mycompany.MainClass
Class-Path: .
com.mycompany.MainClass
应替换为适当的路径(您的主要 class 的完全限定名称)
我不想承认,但问题的解决方案一直盯着我看,我真的很尴尬。我用Java8来开发程序。目标 PC 使用 Java 11,我从没想过要检查 JDK 版本,因为我认为我在两台 PC 上都使用 JDK8。
JavaFX 包含在 JDK8 中,但不包含在 JDK11 中。使用较新的 JDK 版本时,应将其作为外部库添加到项目中。我刚刚将 JDK8 用于 运行 程序,一切正常 100%。不过,感谢您的回答和评论,我学到了很多关于清单和类路径的知识,试图解决这个问题,所以我的努力没有白费!