写点什么

用 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:0011680
用户头像

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

关注

评论

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

鸿蒙游戏生态新纪元:500+厂商共建,3700+游戏上架华为游戏中心

最新动态

Apache Doris & SelectDB 技术能力全面解析

SelectDB

数据库 大数据 Doris SelectDB 实时分析

如何使用通义灵码玩转Linux - AI编程助手提升效率

阿里巴巴云原生

Liunx

加速高水平研究型医院建设!以 AI 力量驱动医院科研管理效能提升

ModelWhale

人工智能 大数据 AI 医疗

App上线Google Play的流程

北京木奇科技有限公司

APP外包 海外APP上线 google play

千万级数据秒级响应!碧桂园服务技术引擎重构智慧社区新标杆

StarRocks

存算分离 StarRocks 湖仓一体 数据查询 OLAP 数据库

关于单条数据过长insert报错问题处理

TiDB 社区干货传送门

数造科技连续入选中国信通院「铸基计划」,领航产业数字化新标杆!

数造万象

AI 数据分析 数据治理 Data 大模型

C语言 AI 通义灵码 VSCode插件安装与功能详解

阿里巴巴云原生

C语言

华为云智能驾驶用户大会高阶智驾量产成焦点,产业链生态合作再加码

极客天地

C++ AI 通义灵码 VSCode插件安装与功能详解

阿里巴巴云原生

c++ 云计算 AI

C语言 AI 通义灵码 VSCode插件安装与功能详解

阿里云云效

C语言

chrony时间同步软件介绍

天翼云开发者社区

chrony 时间同步软件

如何使用通义灵码玩转Linux - AI编程助手提升效率

阿里云云效

Liunx

如何使用BOM和MRP解决生产物料管理混乱问题

积木链小链

数字化转型 智能制造 物料管理

如何使用通义灵码完成PHP单元测试 - AI辅助开发教程

阿里巴巴云原生

php

MySQL 的四种社交障碍等级

秃头小帅oi

从手工测试到AI测试工程师,揭秘大厂20-50K高薪岗位核心技术栈

测试人

人工智能

深入研究:京东商品列表API详解

tbapi

京东API接口 京东商品数据采集 京东商品列表API接口

云备份技术解析:云容灾 CT-CDR 关键技术介绍

天翼云开发者社区

云备份 云灾备

多家企业领先实践证明:成功的软件国产替代不是个例!

用友BIP

AI 智能体 用友BIP 软件国产替代

从传统冶金到智慧工厂:中国恩菲用IoTDB破解有色金属行业数据难题

Apache IoTDB

优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言

数据追梦人

C++ AI 通义灵码 VSCode插件安装与功能详解

阿里云云效

c++ 通义灵码

沐曦与和鲸科技完成兼容性测试,国产GPU与国产AI开发平台的强强联合

ModelWhale

人工智能 大数据 gpu 国产大模型

近20款客服类SDK已适配鸿蒙5,覆盖电商、金融、教育、政务等行业

新消费日报

如何使用通义灵码完成PHP单元测试 - AI辅助开发教程

阿里云云效

php

MySQL备份文件导入GreatSQL MGR环境为什么出现大量报错?

GreatSQL

一键解锁智能体50+场景,HR SaaS就选用友BIP企业AI全栈云

用友BIP

智能体 HR SaaS 用友BIP 企业AI 全栈云

云备份技术解析:永久增量备份

天翼云开发者社区

云备份

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