用JEP 343打包工具,构建自包含、可安装的Java应用程序

OpenJDK社区发布jpackage工具的早期访问版本,这是一个用于打包自包含Java应用程序的新工具。jpackage支持多种应用程序类型,如模块化应用程序和遗留应用程序,并能生成特定于平台的应用程序映像及安装程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenJDK社区发布了JEP 343:打包工具的早期访问版本。JEP 343:打包工具,又名jpackage,是打包自包含Java应用程序和Java运行时环境的新工具。这个基于JavaFX javapackager 工具的原型适用于对jpackage感兴趣的开发人员。

\n

长期以来,Java开发人员一直希望构建这样的应用程序:可以安装在本机平台上,而不是分发jar和配置类路径。借助jpackage,可以在特定平台上以用户习惯的方式安装或卸载Java应用程序,并且,它支持Windows上的msi和exe格式、MacOS上的pkg和dmg格式、Linux上的deb和rpm格式。在安装用jpackage构建的应用程序时,最终用户应该不会注意到任何不同。

\n

jpackage旨在填补其他技术留下的空白,如:

\n
  • \n
  • \n

    javapackager是随Oracle JDK 9 发布的打包工具,在Oracle的JDK 11删除 javaFX时,它作为其中一部分也一起删除了。

    \n\n
  • \n

    Java Web Start在Java 9中被弃用,Oracle JDK 11中还删除了Java Applet Viewer和JNLP。

    \n\n
  • \n

    pack200是为压缩jar文件而设计的工具,其在JDK 11中被弃用,以便从未来的版本中删除。

    \n\n
\n

jpackage支持以下类型的应用程序:

\n
  • \n
  • \n

    已用jlink链接到自定义运行时映像的模块化应用程序

    \n\n
  • \n

    模块化jar文件或jmod文件中的模块化应用程序

    \n\n
  • \n

    运行在类路径上和位于一个或多个jar文件中的遗留应用程序

    \n\n
\n

jpackage的输出是Java应用程序映像,其包含所有必需的Java依赖项。该映像存于文件系统中的单个目录中,可以包含以下内容:

\n
  • \n
  • \n

    本机应用程序启动器

    \n\n
  • \n

    Java运行时映像,包括模块化应用程序时的应用程序模块

    \n\n
  • \n

    应用程序资源,如jar、ico和png

    \n\n
  • \n

    配置文件,如plist、cfg和properties

    \n\n
\n

jpackage工具计划成为新的jdk.jpackage模块中JDK 13的一部分。命令行界面将符合JEP 293: JDK命令行工具选项指南。此外,可以通过名为“jpackage”的ToolProvider API(java.util.spi.ToolProvider)访问jpackage。

\n

jpackage命令行界面

\n

当运行jpackage --help时,会显示一组有价值的信息。我们来看看其中的一些。

\n

jpackage工具有两种模式:

\n
  • \n
  • \n

    create-image:生成特定于平台的应用程序映像

    \n\n
  • \n

    create-installer:生成特定于平台的应用程序安装程序

    \n\n
\n

生成模块化应用程序映像:

\n
jpackage create-image --output outputdir --name AppName \\\n    --main-class package.ClassName -module moduleName -p modulePath\njpackage create-image --o outputdir -n AppName \\\n    -c package.ClassName -m moduleName -p modulePath\n
\n

生成非模块化应用程序映像:

\n
jpackage create-image --input inputdir --output outputdir \\\n    --name AppName --main-class package.ClassName --main-jar MyJar.jar\njpackage create-image -i inputdir -o outputdir -n AppName \\\n    -c package.ClassName -j MyJar.jar\n
\n

生成应用程序安装程序:

\n
jpackage create-installer -i inputdir -o outputdir \\\n    -n  -c package.ClassName -j MyJar.jar\njpackage create-installer -o outputdir -n \\\n    --app-image \n
\n

生成Java运行时安装程序:

\n
jpackage create-installer --runtime-installer\\\n    --name  --output outputdir\njpackage create-installer --runtime-installer \\\n    -n  -o outputdir --runtime-image \n
\n

有些选项适用于所有平台:

\n
  • \n
  • \n

    –main-jar -j \u0026lt;main jar文件 \u0026gt;:应用程序的main JAR;包括main类

    \n\n
  • \n

    –main-class -c \u0026lt;类名\u0026gt;:要执行的应用程序main类的限定名

    \n\n
  • \n

    –installer-type \u0026lt;类型\u0026gt;:在create-image模式中创建的安装程序类型(msi、exe、rpm、deb、dmp、pkg、pkg-app-store)

    \n\n
  • \n

    –runtime-installer:为Java运行时生成特定于平台的安装程序

    \n\n
  • \n

    –jvm-args \u0026lt;java 虚拟机 参数\u0026gt;:传递给虚拟机的Java参数

    \n\n
  • \n

    –install-dir \u0026lt;文件路径\u0026gt;:应用程序安装目录的绝对路径

    \n\n
\n

只适用于MacOS X平台的一些选项:

\n
  • \n
  • \n

    –mac-sign:请求对包进行签名

    \n\n
  • \n

    –mac-bundle-name \u0026lt;名字字符串\u0026gt;:在菜单栏中显示的应用程序名称

    \n\n
  • \n

    –mac-app-store-category \u0026lt;目录字符串\u0026gt;:Mac应用程序商店目录

    \n\n
  • \n

    –mac-signing-keychain \u0026lt;文件路径\u0026gt;:要使用的密钥链的路径

    \n\n
\n

关于jpackage,有一些有趣的事情需要特别注意,其中包括:

\n
  • \n
  • \n

    支持打包Java应用程序,使其适合提交到Windows或MacOS应用商店

    \n\n
  • \n

    当设置文件关联时进行本机集成,以便在打开具有关联后缀的文件时启动应用程序

    \n\n
  • \n

    本机集成支持启动特定于平台的菜单组,如Windows上的“开始(Start)”菜单项

    \n\n
  • \n

    不支持交叉编译;Windows包应该通过在Windows上运行jpackage来创建

    \n\n
  • \n

    不支持JMOD文件中已经提供的法律文件,如单个许可证文件

    \n\n
  • \n

    不支持原生启动画面

    \n\n
  • \n

    不支持自动更新机制

    \n\n
  • \n

    该工具在Solaris平台上不可用

    \n\n
  • \n

    不支持Java Web Start应用程序和JavaFX的特定功能

    \n\n
  • \n

    该工具没有GUI,只提供命令行界面(CLI)

    \n\n
\n

关于jpackage更多的细节,请参考JEP 343: Packaging Tool页面。开发人员可以下载用于WindowsMacOSLinux的抢先体验版。

\n

查看英文原文:Building Self-Contained, Installable Java Applications With JEP 343: Packaging Tool

\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值