编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Jpackage java应用打包工具

wxchong 2024-06-27 01:31:25 开源技术 10 ℃ 0 评论

一、介绍

该jpackage工具将Java应用程序打包到特定于平台的程序包中,该程序包包含所有必需的依赖项。该应用程序可以作为普通JAR文件的集合或作为模块的集合提供。受支持的特定于平台的软件包格式为:

  • Linux:deb和rpm
  • macOS:pkg和dmg
  • Windows:msi和exe

默认情况下,jpackage以最适合其运行系统的格式生成软件包。

基本用法:非模块化应用

假设您有一个包含JAR文件的应用程序,所有应用程序都位于一个名为的目录中lib,并且lib/main.jar包含主类。然后命令

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

将以本地系统的默认格式打包应用程序,将生成的打包文件保留在当前目录中。如果MANIFEST.MF文件中main.jar没有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

基本用法:模块化应用

如果您有一个模块化应用程序,该应用程序由目录中的模块化JAR文件和/或JMOD文件组成,并且模块中lib包含主类myapp,则命令

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

将其打包。如果myapp模块未标识其主类,则必须再次明确指定:

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

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

包元数据

该jpackage工具允许您为包指定各种元数据。所有平台共有的选项是:

  • --app-version
  • --copyright
  • --description
  • --license-file
  • --name
  • --vendor

该工具以适合程序包类型的方式使用提供给这些选项的参数。特定于平台的软件包元数据选项如下所述。

文件关联

您可以通过--file-associations选项为应用程序定义一个或多个文件类型关联,该选项可以多次使用。此选项的参数是一个属性文件,具有以下一个或多个键的值:

  • extension 指定与应用程序关联的文件扩展名,
  • mime-type 指定要与应用程序关联的文件的MIME类型,
  • icon 在应用程序图像中指定一个与此关联一起使用的图标,并且
  • description 指定关联的简短描述。

启动器

默认情况下,该jpackage工具为您的应用程序创建一个简单的本机启动器。您可以通过以下选项来自定义默认启动器:

  • --arguments —如果未将命令行参数提供给启动器,则将命令行参数传递给主类(此选项可以多次使用)
  • --java-options —传递给JVM的选项(此选项可以多次使用)

如果您的应用程序需要其他启动器,则可以通过以下--add-launcher选项添加它们:

  • --add-launcher =

命名的应该是一个属性文件,其中包含一个或多个键app-version icon argumentsjava-options main-class main-jar module或的值win-console。这些键的值将被解释为具有相同名称的选项的参数,但相对于正在创建的启动器而不是默认启动器。该--add-launcher选项可以多次使用。

应用图片

该jpackage工具将构建应用程序映像,作为其在最后一步中调用的特定于平台的打包工具的输入。通常,此图像是一个临时工件,但是有时您需要在打包之前对其进行自定义。因此,您可以分jpackage两个步骤运行该工具。首先,使用特殊包类型创建初始应用程序映像app-image:

$ jpackage --name myapp --module-path lib -m myapp --type app-image

这将在myapp目录中生成一个应用程序映像。根据需要自定义该映像,然后通过以下--app-image选项创建最终包:

$ jpackage --name myapp --app-image myapp

运行时映像

应用程序映像包含组成您的应用程序的文件以及将运行您的应用程序的JDK 运行时映像。默认情况下,该jpackage工具调用该jlink工具来创建运行时映像。图像的内容取决于应用程序的类型:

  • 对于由JAR文件组成的非模块化应用程序,运行时映像包含与常规启动程序提供给未命名模块中的类路径应用程序相同的JDK模块集java。
  • 对于由模块化JAR文件和/或JMOD文件组成的模块化应用程序,运行时映像包含应用程序的主模块及其所有依赖项的可传递闭包。它不会包括所有可用的服务提供商;如果要绑定这些对象,请为工具指定--bind-services选项jpackage。

在任何一种情况下,如果要将其他模块添加到运行时映像,都可以将该--add-modules选项与jpackage工具一起使用。运行时映像中的模块列表在映像的release文件中可用。

该jpackage工具创建的运行时映像不包含调试符号,常用的JDK命令,手册页或src.zip文件。

如果您希望进一步自定义运行时映像,则可以调用jlink自己,并jpackage通过该--runtime-image选项将生成的映像传递给工具。例如,如果您使用该jdeps工具确定非模块化应用程序仅需要java.base和java.sql模块,则可以显着减小软件包的大小:

$ jlink --add-modules java.base,java.sql --output myjre $ jpackage --name myapp --input lib --main-jar main.jar --runtime-image myjre

平台特定的详细信息

本节描述了该jpackage工具特定于平台的方面,包括应用程序图像布局和特定于平台的选项。该命令jpackage --help将打印所有选项的摘要。

该jpackage工具创建的应用程序映像包含一些未在下面的布局中显示的文件。此类文件应视为可能更改的实现详细信息。

的Linux

myapp/ bin/ // Application launcher(s) myapp lib/ app/ myapp.cfg // Configuration info, created by jpackage myapp.jar // JAR files, copied from the --input directory mylib.jar ... runtime/ // JDK runtime image

Linux上的默认安装目录是/opt。可以通过该--install-dir选项覆盖。

Linux特定的选项:

  • --linux-package-name — Linux软件包的名称,默认为应用程序名称
  • --linux-deb-maintainer — DEB软件包的维护者
  • --linux-menu-group —此应用程序所在的菜单组
  • --linux-package-deps —应用程序所需的软件包或功能
  • --linux-rpm-license-type —许可证的类型(License: RPM .spec文件的类型)
  • --linux-app-release — RPM .spec文件的发布值或DEB控制文件的Debian修订版值
  • --linux-app-category — RPM .spec文件的组值或DEB控制文件的Section值
  • --linux-shortcut 为应用程序创建快捷方式

苹果系统

MyApp.app/ Contents/ Info.plist MacOS/ // Application launcher(s) MyApp Resources/ // Icons, etc. app/ MyApp.cfg // Configuration info, created by jpackage myapp.jar // JAR files, copied from the --input directory mylib.jar ... runtime/ // JDK runtime image

macOS上的默认安装目录是/Applications。可以通过该--install-dir选项覆盖。

macOS特定的选项:

  • --mac-package-identifier —唯一标识macOS应用程序的标识符(默认为主类名称;仅限于字母数字,连字符和句点字符)
  • --mac-package-name —出现在菜单栏中的应用程序名称(默认为应用程序名称;长度必须少于16个字符,并且适合在菜单栏和应用程序“信息”窗口中显示)
  • --mac-package-signing-prefix —在对应用程序捆绑包进行签名时,该值会附加到所有需要签名但没有现有捆绑包标识符的组件上
  • --mac-sign —要求对捆绑包进行签名
  • --mac-signing-keychain —钥匙串搜索签名身份的路径(默认为标准钥匙串)
  • --mac-signing-key-user-name — Apple签名身份的团队名称部分(例如,“ Developer ID Application:”)

视窗

MyApp/ MyApp.exe // Application launcher(s) app/ MyApp.cfg // Configuration info, created by jpackage myapp.jar // JAR files, copied from the --input directory mylib.jar ... runtime/ // JDK runtime image

Windows上的默认安装目录是C:/Program Files/。可以通过该--install-dir选项覆盖。

Windows特定的选项:

  • --win-console —为应用程序创建控制台启动器(应为需要控制台交互的应用程序指定)
  • --win-dir-chooser —添加一个对话框,使用户可以选择要在其中安装应用程序的目录
  • --win-menu —将应用程序添加到系统菜单
  • --win-menu-group —放置此应用程序的开始菜单组
  • --win-per-user-install —按用户安装应用程序
  • --win-shortcut —为应用程序创建桌面快捷方式
  • --win-upgrade-uuid —与该软件包的升级相关联的UUID


自己的实战:


C:\Program Files\Java\jdk-17.0.1\bin>jpackage.exe --type exe --input ./input --dest ./output --name Zhiwei --main-jar ZhiweiUser.jar --main-class org.example.MainDialog

[09:27:51.665] 找不到 WiX 工具 (light.exe, candle.exe)

[09:27:51.665] 从 https://wixtoolset.org 下载 WiX 3.0 或更高版本,然后将其添加到 PATH。

错误:类型 [exe] 无效或不受支持

C:\Program Files\Java\jdk-17.0.1\bin>

下载,并设置环境变量PATH为第一位:

https://github.com/wixtoolset/wix3/releases/tag/wix3112rtm





形成一个安装包,但是安装包安装没有提示,会放在Program 路径下面:





点击Exe可以运行。 这样比exe4j 打包exe和拷贝让别人安装jdk,总的来说要简单一些。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表