写点什么

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

  • 2019-03-09
  • 本文字数:2008 字

    阅读完需:约 7 分钟

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

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 命令行界面

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


jpackage 工具有两种模式:


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

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


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


jpackage create-image --output outputdir --name AppName \    --main-class package.ClassName -module moduleName -p modulePathjpackage create-image --o outputdir -n AppName \    -c package.ClassName -m moduleName -p modulePath
复制代码


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


jpackage create-image --input inputdir --output outputdir \    --name AppName --main-class package.ClassName --main-jar MyJar.jarjpackage create-image -i inputdir -o outputdir -n AppName \    -c package.ClassName -j MyJar.jar
复制代码


生成应用程序安装程序:


jpackage create-installer -i inputdir -o outputdir \    -n  -c package.ClassName -j MyJar.jarjpackage create-installer -o outputdir -n \    --app-image 
复制代码


生成 Java 运行时安装程序:


jpackage create-installer --runtime-installer\    --name  --output outputdirjpackage create-installer --runtime-installer \    -n  -o outputdir --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页面。开发人员可以下载用于WindowsMacOSLinux的抢先体验版。


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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-03-09 08:0010951
用户头像

发布了 199 篇内容, 共 81.7 次阅读, 收获喜欢 293 次。

关注

评论

发布
暂无评论
发现更多内容

传统IT部门为什么越来越不受欢迎?

boshi

数字化转型 IT职场 七日更

Gradle无法访问Nexus私服仓库-offline

wjchenge

How to Connect 2 Cisco Switches Together

心在飞

用户故事拆分速查手册(译)

Bruce Talk

敏捷 译文 Agile User Story

找到适合自己的睡眠方案

石云升

生活方式 28天写作 睡眠 3月日更

mybatis 添加日志功能

xiezhr

mybatis 日志

《Redis 核心技术与实战》学习笔记 06

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?

跳蚤

Wireshark数据包分析学习笔记Day18

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

树集合总结

我是程序员小贱

3月日更

javax.imageio.IIOException: Unsupported Image Type

wjchenge

深入剖析 | Java16语法特性

九叔(高翔龙)

Java 架构

从Nacos客户端视角来分析配置中心原理

麦洛

nacos SpringCloud Alibaba 动态配置

产品训练营第八周作业——用户路径地图

innovator琳

用户研究 用户地图 用户数据 用户模型

产品0期-第九周

Jxin

线上问题的一点反思

风翱

复盘 3月日更 线上问题

IO 模型

无心

Netty

一文搞定Diff算法

执鸢者

Vue 大前端 Diff

开源与商业产品

ES_her0

3月日更

主流分布式文件系统总结

跳蚤

第11周课后练习-安全稳定

潘涛

架构师训练营 4 期

uni-app跨端开发H5、小程序、IOS、Android(五):uni-app数据绑定

黑马腾云

html5 微信小程序 uni-app iOS Developer 3月日更

ES6中的新特性:Iterables和iterators

程序那些事

nodejs ES6 程序那些事

央行数字人民币“可控匿名”会侵犯隐私吗?最新解读来了

CECBC

数字货币

《青春有你3》的子弹时间舞台,凝筑了自由视角技术进化史

脑极体

产品经理面试常见问题总结2

lenka

3月日更

翻译:《实用的Python编程》07_02_Anonymous_function

codists

Python

谈兼职创业

Ryan Zheng

思呓(2)

型火🔥

学习 架构 分布式 解耦

登陆用户身份获取

程序员架构进阶

架构设计 认证授权 28天写作 3月日更

寻找被遗忘的勇气(二十一)

Changing Lin

3月日更

用JEP 343打包工具,构建自包含、可安装的Java应用程序_语言 & 开发_Diogo Carleto_InfoQ精选文章