jpackage创建2个JRE

时间:2019-11-09 07:13:53

标签: java javafx

我使用jpackage(与JDK 14一起)来创建独立的JavaFX应用程序。

jpackage的输出看起来很奇怪,它由两个相同的JRE副本组成,并且app文件夹中除App.cfg文件之外的所有文件都可以删除,没有任何问题。 / p>

jpackage不能生成不必要的文件吗?


我所拥有的:

我有一个根据Maven原型org.openjfx:javafx-archetype-simple:0.0.3创建的简单项目。 我刚刚添加了maven-shade-plugin来创建具有依赖项的jar和一个简单的启动类(例如NewMainhere)。

我这样做:

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文件除外。 / p>

删除这些文件后,我运行targetApp\App\App.exe,它运行正常。

删除操作将App的大小从118 MB减小到56 MB。


另一个问题:我使用Windows,jpackage会为Windows生成结果(很多dll文件和exe),我可以创建吗Windows for Mac和Linux上的独立应用程序?

3 个答案:

答案 0 :(得分:1)

之所以得到此结果,是因为您已经创建了一个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

您的第二个问题: 如果这是您的问题,则不能为其他目标交叉创建应用程序。

答案 1 :(得分:0)

您可能想在GitHub上检出JPackageScriptFX项目。它包含一个示例性的多模块maven项目结构以及Mac和Windows的构建脚本,这些脚本将为这两个平台构建所有可用的包类型和可执行文件。您可以在这里找到它:https://github.com/dlemmermann/JPackageScriptFX

答案 2 :(得分:0)

我没有Oracle jpackage的解决方案:

AdoptOpenJDK + jpackager + macOS => .pkg.dmg

  • 下载AdoptOpenJDK_13。解压缩并放入/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk
  • https://mail.openjdk.java.net/pipermail/openjfx-dev/2018-September/022500.html下载jpackager(在我的情况下为osx)。解压缩。
  • jdk.packager.jarjpackager复制到/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/bin(!!!)
  • /yourworkspace/target中的
  • 应该是 programA.jar 文件。 (就我而言,这是一个用OpenJFX + openjdk13创建的小程序)
  • /yourworkspace/jlink在您的JRE上用binlib等表示。您可能是通过jlink创建的。 (就我而言,我有我的自定义JRE + JavaFX模块)
  • /yourworkspace/icons包含 .icns
  • 在您的workspace中用以下内容
  • 创建 jpackager.command 文件:
#! /bin/bash
ABSPATH=$(cd "$(dirname "$0")"; pwd -P)
launcher=`ls $ABSPATH/target/*.jar`
for eachfile in $launcher
do
    if [ -f "$eachfile" ];then
        echo Creating .pkg ...
        echo "$eachfile"
        basename="${eachfile##*/}"
        /Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home/bin/jpackager \
        create-installer \
        --runtime-image $ABSPATH/jlink \
        --name ProgramA \
        --input $ABSPATH/target \
        --main-jar $basename \
        --version 1.0 \
        --copyright "Nikita Gromov 2020" \
        --name "ProgramA-macos" \
        --mac-bundle-name "ProgramA" \
        --output $ABSPATH/appimage \
        --icon $ABSPATH/icons/20200220101822955_easyicon_net_32.icns
     fi
done

双击位于/yourworkspace中的 jpackager.command ,然后等待jpackager创建 ProgramA-macos-1.0.pkg /yourworkspace/appimage

下的 ProgramA-macos-1.0.dmg

我没有Oracle jpackage的解决方案:

AdoptOpenJDK + jpackager + Windows => .msi

  • 安装WiX(!!!)重要步骤。
  • 下载AdoptOpenJDK_11。将安装在C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot
  • https://mail.openjdk.java.net/pipermail/openjfx-dev/2018-September/022500.html下载jpackager(在本例中为获胜)。解压缩。
  • jdk.packager.jarjpackager复制到C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot\bin(!!!)
  • /yourworkspace/target中的
  • 应该是 programA.jar 文件。 (就我而言,这是一个用OpenJFX + openjdk11创建的小程序)
  • /yourworkspace/jlink在您的JRE上用binlib等表示。您可能是通过jlink创建的。 (就我而言,我有我的自定义JRE + JavaFX模块)
  • /yourworkspace/icons包含 .icns
  • 在您的/yourworkspace文件夹中
  • 创建 jpackager.bat 文件,内容如下:
set openjdk=C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot\bin
set saveto=%cd%
cd %openjdk%
jpackager create-installer --runtime-image %saveto%/jlink --input %saveto%/target --main-jar ProgramA.jar --version 1.0 --copyright "Nikita Gromov" --name "ProgramA-win" --output %saveto%/appimage --icon %saveto%/icons/icon.ico --win-menu --win-shortcut --win-dir-chooser

注意 ProgramA.jar 应该位于/yourworkspace/target路径(!!!)

双击位于/yourworkspace中的 jpackager.bat ,然后等到jpackager创建 ProgramA-win-1.0.msi /yourworkspace/appimage

Windows上的自定义JRE + JavaFX mods

创建/yourworkspace/jlink.bat文件。内容应为:

SET openjdk=C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot\bin
SET fx=C:\Programme\AdoptOpenJDK\javafx-jmods-11.0.2
set saveto=%cd%
cd %openjdk%
jlink --module-path %fx% --add-modules=javafx.base --add-modules=javafx.controls --add-modules=javafx.fxml --add-modules=javafx.graphics --add-modules=javafx.web --add-modules=javafx.media --add-modules=javafx.swing --bind-services --output "%saveto%\jlink"

这将使用自定义JRE + JavaFX库创建/yourworkspace/jlink文件夹,您将链接到jpackager