OpenJDK 社区 发布了 JEP 343:打包工具的早期访问版本。JEP 343:打包工具,又名 jpackage,是打包自包含 Java 应用程序和 Java 运行时环境的新工具。这个基于 JavaFX javapackager 工具 的原型适用于对 jpackage 感兴趣的开发人员。
长期以来,Java 开发人员一直希望构建这样的应用程序:可以安装在本机平台上,而不是分发 jar 和配置类路径。借助 jpackage,可以在特定平台上以用户习惯的方式安装或卸载 Java 应用程序,并且,它支持 Windows 上的 msi 和 exe 格式、MacOS 上的 pkg 和 dmg 格式、Linux 上的 deb 和 rpm 格式。在安装用 jpackage 构建的应用程序时,最终用户应该不会注意到任何不同。
jpackage 旨在填补其他技术留下的空白,如:
javapackager 是随 Oracle JDK 9 发布的打包工具,在 Oracle 的 JDK 11 删除 javaFX 时,它作为其中一部分也一起删除了。
Java Web Start 在 Java 9 中 被弃用 ,Oracle JDK 11 中还删除了 Java Applet Viewer 和 JNLP。
pack200 是为压缩 jar 文件而设计的工具,其在 JDK 11 中被弃用,以便从未来的版本中删除。
jpackage 支持以下类型的应用程序:
已用 jlink 链接到自定义运行时映像的模块化应用程序
模块化 jar 文件或 jmod 文件中的模块化应用程序
运行在类路径上和位于一个或多个 jar 文件中的遗留应用程序
jpackage 的输出是 Java 应用程序映像,其包含所有必需的 Java 依赖项。该映像存于文件系统中的单个目录中,可以包含以下内容:
本机应用程序启动器
Java 运行时映像,包括模块化应用程序时的应用程序模块
应用程序资源,如 jar、ico 和 png
配置文件,如 plist、cfg 和 properties
jpackage 工具计划成为新的 jdk.jpackage 模块中 JDK 13 的一部分。命令行界面将符合 JEP 293: JDK 命令行工具选项指南 。此外,可以通过名为“jpackage”的 ToolProvider API (java.util.spi.ToolProvider)访问 jpackage。
当运行 jpackage --help 时,会显示一组有价值的信息。我们来看看其中的一些。
jpackage 工具有两种模式:
create-image:生成特定于平台的应用程序映像
create-installer:生成特定于平台的应用程序安装程序
生成模块化应用程序映像:
复制代码
jpackagecreate-image--outputoutputdir--nameAppName/ --main-classpackage.ClassName-modulemoduleName-pmodulePath jpackagecreate-image--ooutputdir-nAppName/ -cpackage.ClassName-mmoduleName-pmodulePath
生成非模块化应用程序映像:
复制代码
jpackagecreate-image--inputinputdir--outputoutputdir/ --nameAppName--main-classpackage.ClassName--main-jarMyJar.jar jpackagecreate-image-iinputdir-ooutputdir-nAppName/ -cpackage.ClassName-jMyJar.jar
生成应用程序安装程序:
复制代码
jpackagecreate-installer-iinputdir-ooutputdir/ -n -cpackage.ClassName-jMyJar.jar jpackagecreate-installer-ooutputdir-n / --app-image
生成 Java 运行时安装程序:
复制代码
jpackagecreate-installer--runtime-installer/ --name--outputoutputdir jpackagecreate-installer--runtime-installer/ -n -ooutputdir--runtime-image
有些选项适用于所有平台:
–main-jar -j <main jar 文件 >:应用程序的 main JAR;包括 main 类
–main-class -c < 类名 >:要执行的应用程序 main 类的限定名
–installer-type < 类型 >:在 create-image 模式中创建的安装程序类型(msi、exe、rpm、deb、dmp、pkg、pkg-app-store)
–runtime-installer:为 Java 运行时生成特定于平台的安装程序
–jvm-args <java 虚拟机 参数 >:传递给虚拟机的 Java 参数
–install-dir < 文件路径 >:应用程序安装目录的绝对路径
只适用于 MacOS X 平台的一些选项:
–mac-sign:请求对包进行签名
–mac-bundle-name < 名字字符串 >:在菜单栏中显示的应用程序名称
–mac-app-store-category < 目录字符串 >:Mac 应用程序商店目录
–mac-signing-keychain < 文件路径 >:要使用的密钥链的路径
关于 jpackage,有一些有趣的事情需要特别注意,其中包括:
支持打包 Java 应用程序,使其适合提交到 Windows 或 MacOS 应用商店
当设置文件关联时进行本机集成,以便在打开具有关联后缀的文件时启动应用程序
本机集成支持启动特定于平台的菜单组,如 Windows 上的“开始(Start)”菜单项
不支持交叉编译;Windows 包应该通过在 Windows 上运行 jpackage 来创建
不支持 JMOD 文件中已经提供的法律文件,如单个许可证文件
不支持原生启动画面
不支持自动更新机制
该工具在 Solaris 平台上不可用
不支持 Java Web Start 应用程序和 JavaFX 的特定功能
该工具没有 GUI,只提供命令行界面(CLI)
关于 jpackage 更多的细节,请参考 JEP 343: Packaging Tool 页面 。开发人员可以下载用于 Windows 、 MacOS 和 Linux 的抢先体验版。
查看英文原文: Building Self-Contained, Installable Java Applications With JEP 343: Packaging Tool