首页 > 解决方案 > 我使用从 maven 生成的 jar 通过 install4j 为我的应用程序创建了一个安装程序。为什么执行.exe时找不到主类?

问题描述

这是我使用 maven 创建 jar 文件的方法。

​​​

现在对于我的 JavaFX 应用程序,我正在使用 afterburner FX 框架。现在我需要为这个应用程序创建一个安装程序以部署到其他设备。我正在使用 Install4j。我的步骤:

  1. mvn clean package
  2. 将生成的 jar 文件复制并粘贴到不同的目录中
  3. 将该目录添加到 install4j 文件
  4. 在 Java 调用下的 Launcher 上,我选择 jar 文件,然后选择我的主类:`BOOT-INF.classes.inc.pabacus.TaskMetrics.TaskMetricsApplication`
  5. 我构建安装程序并运行它,安装到程序文件,然后打开 exe 文件

但随后会出现一个错误对话框:

java.lang.NoClassDefFoundError: BOOT-INF/classes/inc/pabacus/TaskMetrics/TaskMetricsApplication(错误名称:inc/pabacus/TaskMetrics/TaskMetricsApplication)

标签: javamavenjavafxinstallationinstall4j

解决方案


所以我做错了两件事:

  1. 最初,就像回到过去一样,我尝试将 JavaFX 与 Spring Framework 一起使用——但没有成功。我不再使用 Spring,但我的 pom 文件中仍然有一些剩余的 Spring,这导致BOOT-INF当我将文件打包到 jar 时它会将文件放在一个目录中。我只需要删除 Spring 的剩余部分,boot-inf 目录就消失了。

  2. 因此,在 install4j 中,您选择一个包含要添加到安装程序的文件的目录。在教程中,他们有一个单独的lib目录,其中包含外部库。所以我认为这就是我所需要的。我通过 maven 将我的依赖项复制到一个 lib 文件夹中,然后我将它们与我的 jar 一起放入一个目录中。这就是我的所有目录——jar 文件和 lib 文件夹。那是行不通的。我不知道。显然,它需要maven生成的目标文件夹内的所有文件。我应该只使用目标文件夹本身。

所以你有它。我现在已经成功创建了一个安装程序。我确实希望没有人像我一样愚蠢,但如果你也遇到了同样的麻烦,那么……就这样吧。


推荐阅读