jpackage打包命令(JDK14及以上)

长期以来,Java开发人员一直希望构建可以直接安装在本机平台上的应用程序,而不是分发jar和配置类路径。使用jpackage,可以按照特定平台的用户使用的方式安装/卸载Java应用程序,它支持Windows上的msi和exe格式,MacOS 上的pkg和dmg以及Linux上的deb和rpm。安装使用jpackage构建的应用程序时,最终用户不应注意到任何差异。

Java应用的分发一直是一个比较麻烦的问题。这是因为Java应用的运行需要虚拟机的支持,仅有Java应用打包的JAR文件是不够的,目标机器还需要安装版本匹配的JDK或JRE。随着云原生和容器化技术的流行,Java应用可以选择以容器镜像的形式来打包和分发,极大地降低了分发难度。不过仍然有相当一部分的Java应用需要直接安装在客户的机器上。

通常的解决方案是使用第三方安装工具,如install4j,创建应用的安装包。安装包负责打包应用和所依赖的Java运行环境。安装工具的问题在于过于繁琐,并且通常是收费的。很多时候我们只是需要简单的运行一个Java程序而已。比如,在客户的机器上运行Java编写的数据迁移工具,第三方框架如: quarkus 等
 

jpackage的输出是一个Java应用程序映像,包含所有必需的Java依赖项。映像存储在文件系统的单个目录中,可以包含以下内容:

  • 本机应用程序启动器
  • Java运行时映像,包括模块化应用程序时的应用程序模块
  • 应用程序资源,例如jar,ico,png
  • 配置文件,例如plist,cfg,properties



jpackage工具计划在新的jdk.jpackage模块中成为JDK 13的一部分。

jpackage工具有两种模式:

  • create-image - 生成特定于平台的应用程序镜像
  • create-installer - 为应用程序生成特定于平台的安装程序



要生成模块化应用程序镜像:
 

jpackage create-image --output outputdir --name AppName \
    --main-class package.ClassName -module moduleName -p modulePath
jpackage 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.jar
jpackage 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.jar
jpackage create-installer -o outputdir -n \
    --app-image 



要生成Java运行时安装程序:
 

jpackage create-installer --runtime-installer\
    --name  --output outputdir
jpackage create-installer --runtime-installer \
    -n  -o outputdir --runtime-image 




一些适用于所有平台的选项:

  • --main-jar -j <main jar file> - 应用程序的主要JAR; 包含主类
  • --main-class -c <class name> - 要执行的应用程序主类的限定名称
  • --installer-type <type> - 在create-image模式下创建的安装程序的类型(msi,exe,rpm,deb,dmg,pkg,pkg-app-store)
  • --runtime-installer - 为Java运行时生成特定于平台的安装程序。
  • --jvm-args <java vm arguments> - 传递给虚拟机的Java参数
  • --install-dir <文件路径> - 应用程序安装目录的绝对路径


某些选项仅适用于Mac OS X平台:

  • --mac-sign - 请求对包进行签名
  • --mac-bundle-name <name string> - 菜单栏中显示的应用程序的名称
  • --mac-app-store-category <category string> - Mac App Store类别
  • --mac-signing-keychain <文件路径> - 要使用的钥匙串的路径



关于jpackage的其他有趣的事情包括:

  • 支持打包Java应用程序,使其适合提交到Windows或MacOS应用程序商店
  • 设置文件关联时的本机集成,以便在打开具有关联后缀的文件时启动应用程序
  • 本机集成,可以启动特定于平台的菜单组,例如Windows上的“开始”菜单项
  • 不支持交叉编译; 应该通过在Windows上运行jpackage来创建Windows程序包
  • 将不支持超出JMOD文件中已提供的法律文件,例如单个许可证文件
  • 不支持原生启动画面
  • 不支持自动更新机制
  • 该工具在Solaris平台上不可用
  • 不支持Java Web Start应用程序和JavaFX特定功能
  • 该工具没有GUI; 仅提供命令行界面(CLI)

猜你喜欢

转载自blog.csdn.net/a1058926697/article/details/130883164