我使用从 maven 生成的 jar 通过 install4j 为我的应用程序创建了一个安装程序。为什么执行.exe 找不到main class?

I created an installer via install4j for my app using a jar generated from maven. Why can't it find the main class when executing the .exe?

Here's how I created a jar file using maven.

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

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

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

java.lang.NoClassDefFoundError: BOOT-INF/classes/inc/pabacus/TaskMetrics/TaskMetricsApplication (wrong name: inc/pabacus/TaskMetrics/TaskMetricsApplication)

您似乎已经配置

BOOT-INF.classes.inc.pabacus.TaskMetrics

作为主要 class 当正确的包名称是

inc.pabacus.TaskMetrics.TaskMetricsApplication

或者,您的启动器 VM 参数配置不正确,并且包含可以解释的文本 main class。

所以我做错了两件事:

  1. 最初,就像过去一样,我尝试将 JavaFX 与 Spring 框架一起使用 - 但未成功。我不再使用 Spring,但我的 pom 文件中仍然有一些剩余的 Spring,这导致它在我将文件打包到 jar 时将文件放在 BOOT-INF 目录中。我只需要简单地删除 Spring 剩菜,boot-inf 目录就不见了。

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

好了。我现在已经成功创建了一个安装程序。我真的希望没有人像我一样傻,但是如果你也遇到了同样的烂摊子,好吧......在这里。