java - 我使用从 maven 生成的 jar 通过 install4j 为我的应用程序创建了一个安装程序。为什么执行.exe时找不到主类?
问题描述
现在对于我的 JavaFX 应用程序,我正在使用 afterburner FX 框架。现在我需要为这个应用程序创建一个安装程序以部署到其他设备。我正在使用 Install4j。我的步骤:
mvn clean package
- 将生成的 jar 文件复制并粘贴到不同的目录中
- 将该目录添加到 install4j 文件
- 在 Java 调用下的 Launcher 上,我选择 jar 文件,然后选择我的主类:`BOOT-INF.classes.inc.pabacus.TaskMetrics.TaskMetricsApplication`
- 我构建安装程序并运行它,安装到程序文件,然后打开 exe 文件
但随后会出现一个错误对话框:
java.lang.NoClassDefFoundError: BOOT-INF/classes/inc/pabacus/TaskMetrics/TaskMetricsApplication(错误名称:inc/pabacus/TaskMetrics/TaskMetricsApplication)
解决方案
所以我做错了两件事:
最初,就像回到过去一样,我尝试将 JavaFX 与 Spring Framework 一起使用——但没有成功。我不再使用 Spring,但我的 pom 文件中仍然有一些剩余的 Spring,这导致
BOOT-INF
当我将文件打包到 jar 时它会将文件放在一个目录中。我只需要删除 Spring 的剩余部分,boot-inf 目录就消失了。因此,在 install4j 中,您选择一个包含要添加到安装程序的文件的目录。在教程中,他们有一个单独的
lib
目录,其中包含外部库。所以我认为这就是我所需要的。我通过 maven 将我的依赖项复制到一个 lib 文件夹中,然后我将它们与我的 jar 一起放入一个目录中。这就是我的所有目录——jar 文件和 lib 文件夹。那是行不通的。我不知道。显然,它需要maven生成的目标文件夹内的所有文件。我应该只使用目标文件夹本身。
所以你有它。我现在已经成功创建了一个安装程序。我确实希望没有人像我一样愚蠢,但如果你也遇到了同样的麻烦,那么……就这样吧。
推荐阅读
- android - 如何在 HERE 地图 android 中获取持续时间
- javascript - Webhook 到来自 firebase 云功能的不和谐 url
- python - 使用多索引将数据帧从长格式重塑为宽格式
- python - 如何从 python 中的 base64 编码数据中了解文件的 MIME 类型?
- io - 在 Perl 6 中以独立于操作系统的方式删除目录树
- python - 如何使用 Python 为 Jenkins 构建添加描述
- android - Android R8 找不到方法
- multithreading - 如果我一个接一个地启动 2 个线程,为什么不能保证第一个线程会先启动?
- pdf - 坚持 ASPPDF ImportFromUrl ServerXMLHTTP 错误:请求已超时
- r - Windows 下 TikzDevice 不输出 UTF-8 变音符号的代码