由 Exe4j 创建的具有外部库依赖的 Exe

Exe created by Exe4j with external libs dependation

我们正在尝试用 exe4j 将我们的 jar 文件包装成 exe 文件。我们的 jar 依赖于存储在 libs 文件夹中的几个 jar 库。 我们不想分发 jar 文件,只分发 libs 文件夹中的 exe 和 jar 库。 为了执行应用程序,我们使用自己的 JRE。

这是应用程序的文件结构:

/java 
/libs 
application.exe

在项目类型中,我们使用"Jar in exe mode"选项。 生成了 exe 但执行失败。在 errors.log 我可以看到, java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 如果我将 slf4j.jar 添加到类路径,生成的 exe 会更大并且 error.log 文件中还有另一个 NoClassDefFoundError。

如果我尝试 "Regular mode" 并指定带有外部库的文件夹 - 应用程序运行良好。但是无法为 "Jar in exe mode".

指定文件夹

有什么方法可以让exe包装jar文件,并使用存储在外部libs文件夹中的jar库,而不需要手动指定它们并将它们打包到exe中?

We don't want to distribute jar file, only exe and jar libraries in libs folder.

生成的可执行文件中的 JAR 文件不受任何保护,因为当可执行文件启动时,它将被提取到 %TEMP% 目录。这就是为什么您可以使用常规模式并将 JAR 文件放在 lib 目录中的原因。

要保护 JAR 文件,请使用像 proguard 这样的混淆器。