写点什么

用 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


2019-03-09 08:0011299
用户头像

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

关注

评论

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

直播预告 | 解构OLAP!新型多维分析架构范式全公开!Apache Doris 将带来五个重磅议题!

SelectDB

数据库 OLAP MPP Apaache Doris 直播活动

一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue

华为云开发者联盟

Java 开发 华为云

flutter系列之:UI layout简介

程序那些事

flutter 程序那些事 6月月更

华为云鲲鹏DevKit代码迁移实战

乌龟哥哥

6月月更

APICloud可视化开发新手图文教程

YonBuilder低代码开发平台

App APICloud 低代码开发 移动端开发 可视化开发

新思科技助力以色列Visuality Systems推进安全“左移”

InfoQ_434670063458

软件开发 代码 新思科技 安全测试 安全左移

仅需三步学会使用低代码ThingJS与森数据DIX数据对接

ThingJS数字孪生引擎

可视化 数字孪生

第二届征文大赛开奖啦!速来领奖!

InfoQ写作社区官方

热门活动 初夏征文

攻防演练 | 网络安全“吹哨人”:安全监控

青藤云安全

网络安全 主机安全 攻防演练

图像搜索是什么

Geek_e369a5

图像搜索 图像搜索是什么

2022 年 DevOps 路线图|Medium

观测云

Spark ShuffleManager

Geek_qsftko

大数据 spark

搭建在线帮助中心,轻松帮助客户解决问题

小炮

改变世界的开发者丨玩转“俄罗斯方块”的瑶光少年

华为云开发者联盟

人工智能 华为云 俄罗斯方块

为什么要开发分布式操作系统

LAXCUS分布式操作系统

分布式计算 分布式存储 超算 云边端协同 分布式操作

【6.3-6.10】精彩博文回顾

InfoQ写作社区官方

优质创作周报

推开混合云市场大门,Lenovo xCloud的破局之道

脑极体

自助洗车加盟具体都有哪些优势

共享电单车厂家

自助洗车加盟

项目那么多为何要选择自助洗车

共享电单车厂家

自助洗车加盟

掌握高性能计算前,我们先了解一下它的历史

华为云开发者联盟

华为云 高性能计算 处理器

APICloud 5月SDK发版说明

YonBuilder低代码开发平台

App 低代码 APICloud 可视化开发

想加盟自助洗车不知道一般啥流程

共享电单车厂家

自助洗车加盟

李飞飞:我更像物理学界的科学家,而不是工程师|深度学习崛起十年

OneFlow

人工智能 深度学习 李飞飞 ImageNet

Flutter在数字生活的发展与天翼云盘落地实践

flutter 架构 混合应用开发 移动开发 客户端

数据的软删除—什么时候需要?又如何去实现?

Geek_rze78a

6月月更

APICloud可视化开发丨一键生成专业级源码

YonBuilder低代码开发平台

App 低代码 可视化 APICloud 移动端开发

如何用Pygame制作简单的贪吃蛇游戏

行者AI

自助洗车加盟前要准备些什么吗

共享电单车厂家

自助洗车加盟 自助洗车品牌

Linux 之父亮相,OpenCloudOS 社区开放日来了

腾讯安全云鼎实验室

新思科技在《 2022 年 Gartner® 应用安全测试关键能力报告》中表现优异 在五个常见用例中荣获最高分

InfoQ_434670063458

新思科技 Gartner 应用安全测试

传统企业在进行信息化升级的过程中,如何做好信息化顶层设计

BeeWorks

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