AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

AI存储需求的演进与ScaleFlux的应对

ScaleFlux

数据中心 企业级NVMeSSD 存储优化

"催化型领导力(Catalyst Leadership)" 敏捷领导者CAL 1认证 · 8月9-10日(周末班)

ShineScrum

轻帆云ITSM:以AI赋能制造业,构建高效运维新范式

云智慧AIOps社区

ITSM ITSM软件 工单管理系统

HarmonyOS NEXT 使用 relationalStore 实现数据库操作

威哥爱编程

#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】03.什么是端云一体化开发,有什么优势?

与辉鸿蒙

HarmonyOS HarmonyOS NEXT

【CodeBuddy】三分钟开发一个实用小功能之:3D旋转相册

jimaks

CSS

四位图灵奖掌舵 2025智源大会揭示AI进化新路径

智源研究院

《算法导论(第4版)》阅读笔记:p101-p114

codists

算法

【HarmonyOS 5】金融应用开发鸿蒙组件实践

GeorgeGcs

RECCV检测人脸伪造项目尝试与扩展

溪抱鱼

人工智能 大数据 人脸识别

#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】06.部署模板示例的云测工程到AGC云端

与辉鸿蒙

HarmonyOS HarmonyOS NEXT 端云一体化

从三流作者到虎嗅公众号头条——我的AI写作方法论

田威AI

AI

鸿蒙 HarmonyOS NEXT 系统 Preference 首选项使用全解析

威哥爱编程

HarmonyOS HarmonyOS NEXT Harmony5

#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】02.核心功能操作路径及ModelArts AI图像识别技术

与辉鸿蒙

HarmonyOS HarmonyOS NEXT

蚂蚁集团数字蚂力与珀莱雅战略合作:打造AI智能化应用矩阵 提升消费者体验和企业竞争力

Lily

#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】01.人工智能AI诊断分析农作物病虫害APP介绍

与辉鸿蒙

HarmonyOS NEXT 端云一体化 HarmonyOS5.0

提升开发运维效率:原力棱镜游戏公司的 Amazon Q Developer CLI 实践

亚马逊云科技 (Amazon Web Services)

全国独家线下面授 | 大规模敏捷LeSS认证上海6月19-21日【报名享多重福利优惠】

ShineScrum

#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】05.端云一体化开发工程目录结构

与辉鸿蒙

HarmonyOS HarmonyOS NEXT 端云一体化

“从PMO到VMO价值交付管理” — Agile VMO业务敏捷CVP认证 | 7月26-27日 · 上海线下

ShineScrum

WebGL与APP之间的通讯方式

北京木奇移动技术有限公司

软件外包公司 webgl开发 webgl外包公司

一站式等保服务

黑龙江陆陆信息测评部

时光有节,岁月有气,用 CodeBuddy + 地图 MCP 构建二十四节气

不惑

CodeBuddy首席试玩官

NAS远程访问选哪个?内网穿透工具对比:贝锐花生壳完胜节点小宝

科技热闻

MySQL 派生表查询导致 Crash 的根源分析与解决方案

GreatSQL

【CodeBuddy】三分钟开发一个实用小功能之:动态文字路径动画

jimaks

CSS

企业为什么要实施信息化体系建设

优秀

企业信息化 信息化 信息化系统

极兔快递Java岗,薪资18-35K,看看难度

王中阳Go

Java

再看2025大模型风云变幻,深根者立于终局

脑极体

AI

WebGL与App的集成开发

北京木奇移动技术有限公司

软件外包公司 webgl开发 webgl外包开发

从炫技到实用,天工超级智能体(Skywork Super Agents)的破冰之旅

脑极体

AI

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