我使用jpackage
(带有 JDK 14)来创建独立的 JavaFX 应用程序。
jpackage
的输出看起来很奇怪,它由两个相同的 JRE 副本以及 app
文件夹中的所有文件组成,除了 App.cfg
> 文件,可以毫无问题地删除。
jpackage
可以不生成不必要的文件吗?
我有:
我有一个从 Maven 原型(prototype) org.openjfx:javafx-archetype-simple:0.0.3
创建的简单项目。
我刚刚添加了 maven-shade-plugin
用于创建具有依赖项的 jar 和一个简单的启动类(例如 NewMain
class here )。
我愿意:
mvn package
mvn javafx:jlink
jpackage --package-type app-image --dest targetApp --name App --runtime-image target/image --main-jar testApp-1.0-SNAPSHOT.jar --input target
结果我有两个带有 JRE 的文件夹(完全相同):
targetApp\App\runtime
targetApp\App\app\image
并且 targetApp\App\app
中的所有文件(和文件夹)(JRE (~53 MB)、Jar (~9 MB)、类...)都可以安全删除,除了 App.cfg
文件。
删除这些文件后,我运行 targetApp\App\App.exe
并且它工作正常。
删除会将 App
的大小从 118 MB 减少到 56 MB。
另一个问题:我使用 Windows,jpackage
生成 Windows 的结果(很多 dll
文件和 exe
),我可以在 Windows 中为 Mac 和 Linux 创建独立的应用程序吗?
最佳答案
您得到这个结果是因为您已经创建了一个 uber-jar,其中包含除了您通过 --input target
指定的内容之外的所有内容,根据文档,它具有以下效果。
All files in the input directory will be packaged into the
application image.
尝试仅删除选项 --input target
是否有效,或者不创建 uber-jar。相反,使用 maven-dependency-plugin 将所有依赖项复制到单个文件夹中,例如 target/libs
,然后显式指定 --input target/libs
。
你的第二个问题: 如果这是您的问题,您无法为其他目标交叉创建应用程序。
关于java - jpackage 创建 2 个 JRE 副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777228/