java - jpackage 创建 2 个 JRE 副本

标签 java javafx

我使用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/

相关文章:

java - 如何为java创建用户表,如asp.net中的aspnet_regsql?

java - 使用 PostgreSQL 和 Spring Boot 时是否有规则禁止将其实体类命名为 "User"?

java - 我希望我的 Android 应用程序能够打开所有文件扩展名

java - 如何在工具栏上的每个菜单项之间添加分隔符

java - (JavaFx)正确的方式表示静态FXML字段(以及为什么这是一个坏主意)

javafx - 如何为 JavaFX TableView 设置项目 - 对象包含另一个对象?

java - Spring启动Jdbc模板

java - 如何使用 JavaFX 将复选框的值传递给另一个方法?

java - 使用 javafx 媒体类播放 wmv 文件

java - 检查 JavaFX-FlowPane 中包装的元素