当前位置: 首页 > news >正文

java14学习笔记-打包工具 (Incubator)

在 JDK 14 中,jpackage 工具作为正式特性(JEP 343)被引入,它是一个用于创建自包含 Java 应用程序包的工具,能够将 Java 应用及其依赖、JRE 和启动脚本打包成平台特定的安装程序(如 .exe、.dmg、.deb 等),大大简化了 Java 应用的分发和部署流程。

目标

基于JavaFX javapackager工具创建一个简单的打包工具,该工具:
支持原生打包格式,为最终用户提供自然的安装体验。这些格式包括Windows上的msi和exe,macOS上的pkg和dmg,以及Linux上的deb和rpm。
允许在打包时指定启动时间参数。
可以从命令行直接调用,也可以通过ToolProvider API以编程方式调用。

动机

许多Java应用程序需要以一流的方式安装在本机平台上,而不是简单地放置在类路径或模块路径上。应用程序开发人员只交付一个简单的JAR文件是不够的;他们必须提供适合本机平台的可安装包。这允许以用户熟悉的方式分发、安装和卸载Java应用程序。例如,在Windows上,用户希望能够双击软件包来安装他们的软件,然后使用控制面板删除软件;在macOS上,用户希望能够双击DMG文件并将他们的应用程序拖动到application文件夹中。
打包工具还可以帮助填补其他技术留下的空白,如Java Web Start(已从Oracle的JDK 11中删除)和pack200(已在JDK 11中弃用,将在未来的版本中删除)。开发人员可以使用jlink将JDK精简到所需的最小模块集,然后使用打包工具生成一个压缩的、可安装的映像,可以部署到目标机器上。
为了满足这些要求,Oracle的JDK 8中分发了一个名为javapackager的打包工具。然而,作为JavaFX删除的一部分,它已从Oracle的JDK 11中删除。

描述

jpackage工具将Java应用程序打包成一个特定于平台的包,其中包含所有必要的依赖关系。应用程序可以作为普通JAR文件的集合或模块的集合提供。支持的特定于平台的包格式包括:
Linux:deb和rpm
macOS:pkg和dmg
Windows:msi和exe
默认情况下,jpackage以最适合其运行系统的格式生成包。

使用

非模块化

假设您有一个由JAR文件组成的应用程序,所有文件都在一个名为lib的目录中,lib/main.JAR包含main类。使用下面命令

jpackage --name myapp --input lib --main-jar main.jar

将以本地系统的默认格式打包应用程序,将生成的包文件保留在当前目录中。如果是MANIFEST。main.jar中的MF文件没有main Class属性,则必须显式指定主类:

jpackage --name myapp --input lib --main-jar main.jar --main-class myapp.Main

包的名称将是myapp,但包文件本身的名称会更长,并以包类型结尾(例如myapp.exe)。该软件包将包括一个应用程序的启动器,也称为myapp。为了启动应用程序,启动器将把从输入目录复制的每个JAR文件放置在JVM的类路径上。

如果希望以默认格式以外的格式生成包,请使用--type选项。例如,要在macOS上生成pkg文件而不是dmg文件:

jpackage --name myapp --input lib --main-jar main.jar --type pkg

模块化

如果您有一个模块化应用程序,由lib目录中的模块化JAR文件和/或JMOD文件组成,主类在模块myapp中,那么使用下面命令

jpackage --name myapp --module-path lib -m myapp

将打包它。如果myapp模块没有标识其主类,那么您必须再次明确指定:

jpackage --name myapp --module-path lib -m myapp/myapp.Main

(打包模块化JAR或JMOD文件时,您可以使用JAR和JMOD工具的--main class选项指定主类。)

打包参数

--app-version <version> 应用程序版本

--copyright <string> 版权

--description <string> 描述

--license-file <file> 许可证文件

--name <string> 名称

--vendor <string> 供应商

http://www.dtcms.com/a/329755.html

相关文章:

  • MoonBit Perals Vol.05: 函数式里的依赖注入:Reader Monad
  • JPrint免费的Web静默打印控件:PDF打印中文乱码异常解决方案
  • 什么是JSP和Servlet以及二者的关系
  • window显示驱动开发—多平面覆盖 VidPN 呈现
  • MVCC底层实现原理
  • Flask入门:从零搭建Web服务器
  • 雅思大作文笔记
  • iOS 签名证书在版本迭代和iOS上架中的全流程应用
  • Docker 在 Linux 中的额外资源占用分析
  • 智汇河套,量子“风暴”:量子科技未来产业发展论坛深度研讨加速产业成果转化
  • 信息学奥林匹克竞赛(NOI/NOIP/CSP) 学习进度自查表
  • 使用 Python Selenium 和 Requests 实现歌曲网站批量下载实战
  • 嵌入式学习 day50 IMX6ULL裸机开发 - 时钟
  • Linux 5.15.189-rt87 实时内核安装 NVIDIA 显卡驱动
  • 手机充电线贴标机如何使用
  • 内存可见性和伪共享问题
  • php7 太空船运算符
  • 在实验室连接地下车库工控机及其数据采集设备
  • 《零基础入门AI:深度学习中的视觉处理(卷积神经网络(CNN)学习)》
  • Github desktop介绍(GitHub官方推出的一款图形化桌面工具,旨在简化Git和GitHub的使用流程)
  • SpringMVC 6+源码分析(六)参数处理
  • 18. parseInt 的参数有几个
  • C语言——深入理解指针(三)
  • 【LeetCode】6. Z 字形变换
  • 美团搜索推荐统一Agent之性能优化与系统集成
  • Linux小白加油站,第二周
  • 云手机未来的发展趋势如何?
  • docker load镜像后 名字和标签异常解决
  • Centos 用户管理
  • [Oracle数据库] Oracle的表维护