jpackage与jlink等编译打包工具

发布时间 2023-11-27 20:36:43作者: 麒麟正青春

jpackage与jlink等编译打包工具都位于jdk/bin目录下,可以通过命令终端直接执行也可通过idea直接调用。

如果配置了环境变量就可以通过终端直接执行.

1、查看版本号:

  PS C:\Users\Administrator\Desktop> jpackage --version  

  21.0.1

  PS C:\Users\Administrator\Desktop> jlink --version

  21.0.1  

  PS C:\Users\Administrator\Desktop> java -version
  openjdk version "21.0.1" 2023-10-17
  OpenJDK Runtime Environment (build 21.0.1+12-29)
  OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)
  PS C:\Users\Administrator\Desktop> javac -version
  javac 21.0.1
  PS C:\Users\Administrator\Desktop> jar --version
  jar 21.0.1

2、查看命令参数  

PS C:\Users\Administrator\Desktop> jpackage --help
用法:jpackage <options>

示例用法:
--------------
生成适合主机系统的应用程序包:
对于模块化应用程序:
jpackage -n name -p modulePath -m moduleName/className
对于非模块化应用程序:
jpackage -i inputDir -n name \
--main-class className --main-jar myJar.jar
从预构建的应用程序映像:
jpackage -n name --app-image appImageDir
生成应用程序映像:
对于模块化应用程序:
jpackage --type app-image -n name -p modulePath \
-m moduleName/className
对于非模块化应用程序:
jpackage --type app-image -i inputDir -n name \
--main-class className --main-jar myJar.jar
要为 jlink 提供您自己的选项,请单独运行 jlink:
jlink --output appRuntimeImage -p modulePath \
--add-modules moduleName \
--no-header-files [<additional jlink options>...]
jpackage --type app-image -n name \
-m moduleName/className --runtime-image appRuntimeImage
生成 Java 运行时程序包:
jpackage -n name --runtime-image <runtime-image>

一般选项:
@<filename>
从文件读取选项和/或模式
可以多次使用此选项。
--type -t <type>
要创建的程序包的类型
有效值为:{"app-image", "exe", "msi"}
如果未指定此选项,则将创建与平台相关的
默认类型。
--app-version <version>
应用程序和/或程序包的版本
--copyright <copyright string>
应用程序的版权
--description <description string>
应用程序的说明
--help -h
将用法文本输出到输出流并退出,用法文本中包含
适用于当前平台的每个有效选项的列表和说明
--icon <file path>
应用程序包图标的路径
(绝对路径或相对于当前目录的路径)
--name -n <name>
应用程序和/或程序包的名称
--dest -d <destination path>
用来放置所生成的输出文件的路径
(绝对路径或相对于当前目录的路径)
默认为当前的工作目录。
--temp <directory path>
用来创建临时文件的新目录或空白目录的路径
(绝对路径或相对于当前目录的路径)
如果指定,则在任务完成时将不删除临时目录,
必须手动删除临时目录。
如果未指定,则将创建一个临时目录,
并在任务完成时删除该临时目录。
--vendor <vendor string>
应用程序的供应商
--verbose
启用详细的输出
--version
将产品版本输出到输出流并退出。

用来创建运行时映像的选项:
--add-modules <模块名称>[,<模块名称>...]
要添加的模块的逗号 (",") 分隔列表
此模块列表连同主模块(如果指定)
将作为 --add-module 参数传递到 jlink。
如果未指定,则仅使用主模块(如果指定了 --module),
或者使用默认的模块集(如果指定了
--main-jar)。
可以多次使用此选项。
--module-path -p <module path>...
路径的 ; 分隔列表
每个路径要么是模块的目录,要么是
模块化 jar 的路径。
(每个路径可以是绝对路径,也可以是相对于当前目录的路径。)
可以多次使用此选项。
--jlink-options <jlink 选项>
要传递给 jlink 的选项列表(用空格分隔)
如果未指定,则默认为 "--strip-native-commands
--strip-debug --no-man-pages --no-header-files"。
可以多次使用此选项。
--runtime-image <directory path>
将复制到应用程序映像的预定义
运行时映像的路径
(绝对路径或相对于当前目录的路径)
如果未指定 --runtime-image,jpackage 将运行 jlink 以
使用如下选项创建运行时映像:
--strip-debug、--no-header-files、--no-man-pages 和
--strip-native-commands。

用来创建应用程序映像的选项:
--input -i <directory path>
包含要打包的文件的输入目录的路径
(绝对路径或相对于当前目录的路径)
输入目录中的所有文件将打包到
应用程序映像中。
--app-content <additional content>[,<additional content>...]
要添加到应用程序有效负载中的文件和/或
目录的逗号分隔路径列表。
此选项可以多次使用。

用来创建应用程序启动程序的选项:
--add-launcher <launcher name>=<file path>
启动程序的名称和包含关键字-值对列表的
属性文件的路径
(绝对路径或相对于当前目录的路径)
可以使用关键字 "module"、"main-jar"、"main-class"、"description"、
"arguments"、"java-options"、"app-version"、"icon"、
"launcher-as-service"、
"win-console"、"win-shortcut"、"win-menu"、
"linux-app-category" 和 "linux-shortcut"。
这些选项将添加到原始命令行选项中或者用来覆盖
原始命令行选项,以构建额外的替代启动程序。
将从命令行选项构建主应用程序启动程序。
可以使用此选项构建额外的替代启动程序,
可以多次使用此选项来构建
多个额外的启动程序。
--arguments <main class arguments>
在没有为启动程序提供命令行参数时,
要传递到主类的命令行参数
可以多次使用此选项。
--java-options <java options>
要传递到 Java 运行时的选项
可以多次使用此选项。
--main-class <class name>
要执行的应用程序主类的限定名称
只有在指定了 --main-jar 时才能使用此选项。
--main-jar <main jar file>
应用程序的主 JAR;包含主类
(指定为相对于输入路径的路径)
可以指定 --module 或 --main-jar 选项,但是不能同时指定
两者。
--module -m <module name>[/<main class>]
应用程序的主模块(以及可选的主类)
此模块必须位于模块路径中。
如果指定了此选项,则将在 Java 运行时映像中
链接主模块。可以指定 --module 或 --main-jar 选项,
但是不能同时指定这两个选项。

用来创建应用程序启动程序的与平台相关的选项:
--win-console
为应用程序创建控制台启动程序,应当为
需要控制台交互的应用程序指定

用来创建应用程序包的选项:
--about-url <url>
应用程序主页的 URL
--app-image <directory path>
用来构建可安装程序包的
预定义应用程序映像的位置
(绝对路径或相对于当前目录的路径)
--file-associations <file path>
包含关键字-值对列表的属性文件的路径
(绝对路径或相对于当前目录的路径)
可以使用关键字 "extension"、"mime-type"、"icon" 和 "description"
来描述此关联。
可以多次使用此选项。
--install-dir <directory path>
默认安装位置下面的相对子路径
--license-file <file path>
许可证文件的路径
(绝对路径或相对于当前目录的路径)
--resource-dir <directory path>
覆盖 jpackage 资源的路径
可以通过向该目录中添加替代资源来覆盖 jpackage 的
图标、模板文件和其他资源。
(绝对路径或相对于当前目录的路径)
--runtime-image <directory path>
要安装的预定义运行时映像的路径
(绝对路径或相对于当前目录的路径)
在创建运行时程序包时需要使用选项。
--launcher-as-service
请求创建安装程序,以将主
应用程序启动程序注册为后台服务类型应用程序。

用来创建应用程序包的与平台相关的选项:
--win-dir-chooser
添加一个对话框以允许用户选择
产品的安装目录。
--win-help-url <url>
用户可以从中获取更多信息或技术支持的 URL
--win-menu
请求为此应用程序添加开始菜单快捷方式
--win-menu-group <menu group name>
此应用程序所在的开始菜单组
--win-per-user-install
请求基于每个用户执行安装
--win-shortcut
请求为此应用程序添加桌面快捷方式
--win-shortcut-prompt
添加一个对话框以允许用户选择是否将由安装程序
创建快捷方式。
--win-update-url <url>
可用应用程序更新信息的 URL
--win-upgrade-uuid <id string>
与此程序包的升级相关联的 UUID

/////////////////////////////////////////////////////////////////////////////////////////

PS C:\Users\Administrator\Desktop> jlink --hlep
错误: 未知选项: --hlep
用法: jlink <选项> --module-path <模块路径> --add-modules <模块>[,<模块>...]
使用 --help 可列出可能的选项
PS C:\Users\Administrator\Desktop>
jlink --help
用法: jlink <选项> --module-path <模块路径> --add-modules <模块>[,<模块>...]
可能的选项包括:
--add-modules <mod>[,<mod>...] 除了初始模块之外要解析的
根模块。<mod> 还可以为 ALL-MODULE-PATH。
--bind-services 链接服务提供方模块及其
被依赖对象
--compress <compress> 要在压缩资源时使用的压缩:
接受的值为:
zip-[0-9],其中 zip-0 表示无压缩,
zip-9 表示最佳压缩。
默认值为 zip-6。
要在未来发行版中删除的已过时值:
0:无压缩。等同于 zip-0。
1:常量字符串共享
2:等同于 zip-6。
--disable-plugin <pluginname> 禁用所提及的插件
--endian <little|big> 所生成 jimage
的字节顺序 (默认值: native)
-h, --help, -? 输出此帮助消息
--ignore-signing-information 在映像中链接已签名模块化
JAR 的情况下隐藏致命错误。
已签名模块化 JAR 的签名
相关文件将不会复制到
运行时映像。
--launcher <名称>=<模块>[/<主类>]
为模块和主类添加给定
名称的启动程序命令
(如果指定)
--limit-modules <模块>[,<模块>...] 限制可观察模块的领域
--list-plugins 列出可用插件
-p, --module-path <path> 模块路径。
如果未指定,将使用 JDK 的 jmods
目录(如果存在该目录)。如果指定,
但它不包含 java.base 模块,
则将添加 JDK 的 jmods 目录
(如果存在该目录)。
--no-header-files 排除包含标头文件
--no-man-pages 排除手册页
--output <路径> 输出路径的位置
--save-opts <文件名> 将 jlink 选项保存在指定文件中
-G, --strip-debug 去除调试信息
--suggest-providers [<名称>,...] 建议可从模块路径中实现
给定服务类型的提供方
-v, --verbose 启用详细跟踪
--version 版本信息
@<文件名> 从文件中读取选项

/////////////////////////////////////////////////////////////////////////////

PS C:\Users\Administrator\Desktop> jar --help
用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
jar 创建类和资源的档案, 并且可以处理档案中的
单个类或资源或者从档案中还原单个类或资源。

示例:
# 创建包含两个类文件的名为 classes.jar 的档案:
jar --create --file classes.jar Foo.class Bar.class
# 使用现有的清单创建档案, 其中包含 foo/ 中的所有文件:
jar --create --file classes.jar --manifest mymanifest -C foo/ .
# 创建模块化 jar 档案, 其中模块描述符位于
# classes/module-info.class:
jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ classes resources
# 将现有的非模块化 jar 更新为模块化 jar:
jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0
-C foo/ module-info.class
# 创建包含多个发行版的 jar, 并将一些文件放在 META-INF/versions/9 目录中:
jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes

要缩短或简化 jar 命令, 可以在单独的文本文件中指定参数,
并使用 @ 符号作为前缀将此文件传递给 jar 命令。

示例:
# 从文件 classes.list 读取附加选项和类文件列表
jar --create --file my.jar @classes.list


主操作模式:

-c, --create 创建档案。通过 -f 或 --file 指定的档案文件名
包含路径时,还将创建
缺少的父目录
-i, --generate-index=FILE 生成指定 jar 档案的索引信息。
此选项已过时,
可能会在未来发行版中删除。
-t, --list 列出档案的目录
-u, --update 更新现有 jar 档案
-x, --extract 从档案中提取指定的 (或全部) 文件
-d, --describe-module 输出模块描述符或自动模块名称
--validate 验证 jar 档案的内容。此选项
将验证由多发行版 jar 档案导出
的 API 在所有不同的发行版本中
是否一致。

在任意模式下有效的操作修饰符:

-C DIR 更改为指定的目录并包含
以下文件
-f, --file=FILE 档案文件名。省略时, 基于操作
使用 stdin 或 stdout
--release VERSION 将下面的所有文件都放在
jar 的版本化目录中 (即 META-INF/versions/VERSION/)
-v, --verbose 在标准输出中生成详细输出

在创建和更新模式下有效的操作修饰符:

-e, --main-class=CLASSNAME 捆绑到模块化或可执行
jar 档案的独立应用程序
的应用程序入口点
-m, --manifest=FILE 包含指定清单文件中的
清单信息
-M, --no-manifest 不为条目创建清单文件
--module-version=VERSION 创建模块化 jar 或更新
非模块化 jar 时的模块版本
--hash-modules=PATTERN 计算和记录模块的散列,
这些模块按指定模式匹配并直接或
间接依赖于所创建的模块化 jar 或
所更新的非模块化 jar
-p, --module-path 模块被依赖对象的位置, 用于生成
散列

只在创建, 更新和生成索引模式下有效的操作修饰符:

-0, --no-compress 仅存储; 不使用 ZIP 压缩
--date=TIMESTAMP 具有可选时区的 ISO-8601 扩展偏移
日期时间格式的时间戳(用于条目的时间戳),
例如,"2022-02-12T12:30:00-05:00"

其他选项:

-?, -h, --help[:compat] 提供此帮助,也可以选择性地提供兼容性帮助
--help-extra 提供额外选项的帮助
--version 输出程序版本

如果模块描述符 'module-info.class' 位于指定目录的
根目录中, 或者位于 jar 档案本身的根目录中, 则
该档案是一个模块化 jar。以下操作只在创建模块化 jar,
或更新现有的非模块化 jar 时有效: '--module-version',
'--hash-modules' 和 '--module-path'。

如果为长选项提供了必需参数或可选参数, 则它们对于
任何对应的短选项也是必需或可选的。