在平时我们打包会将其打成Jar,那么在其他平台运行的时候就需要安装jre来支持运行。我们用的是javapackager,javapackager是jdk1.8自带的一个打包工具,可以生成各个系统的安装包
准备工作
- innosetup-5.6.0.exe(windows下Java8支持6版本以下的,不要下载6及其6以上的版本,否则无法打包成功)
- wix(打包成msi必须下载,没有下载
javapackager
会提示缺少wix) - JDK8
用法
代码语言:javascript复制javapackager command [options]
command :应该执行的任务
[options] :以空格分隔的命令的一个或多个选项
Commands
您可以指定以下命令之一。在命令之后,指定它的选项。
-createbss
:将 CSS 文件转换为二进制形式。-createjar
:根据其他参数生成 JAR 存档。-deploy
:组装应用程序包以进行重新分发。默认情况下,部署任务会生成基础应用程序包,但如果需要,它也可以生成自包含的应用程序包。-makeall
:使用预定义的大多数参数,一次调用执行编译、createjar
和deploy
步骤,并尝试生成所有适用的自包含应用程序包。源文件必须位于名为 的文件夹src
中,生成的文件(JAR、JNLP、HTML 和自包含应用程序包)位于名为 的文件夹中dist
。此命令只能以最少的方式配置,并且尽可能自动化。-signjar
:使用提供的证书对 JAR 文件进行签名。
createbss 命令的选项
-
-outdir dir
: 将接收生成的输出文件的目录的名称。 -
-srcdir dir
:要打包的文件的基本目录。 -
-srcfiles files
:-srcdir
选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。
createjar 命令的选项
-
-appclass app-class
:要执行的应用程序类的限定名称。 -
-argument arg
:要作为<fx:argument>
元素插入到 JNLP 文件中的未命名参数。 -
-classpath files
:相关 JAR 文件名列表。 -
-manifestAttrs manifest-attributes
:其他清单属性的名称和值列表。句法:“名称 1=值 1,名称 2=值 2,名称 3=值 3” -
-nocss2bin
:打包器在复制到 JAR 之前不会将 CSS 文件转换为二进制形式。 -
-outdir dir
:将接收生成的输出文件的目录的名称。 -
-outfile filename
:将生成的文件的名称(不带扩展名)。 -
-paramfile file
:具有默认命名应用程序参数的属性文件。 -
-preloader preloader-class
:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。 -
-srcdir dir
:要打包的文件的基本目录。 -
-srcfiles files
:-srcdir
选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。
deploy命令的选项
-
-allpermissions
:如果存在,应用程序将需要 JNLP 文件中的所有安全权限。 -
-appclass app-class
:要执行的应用程序类的限定名称。 就是详细包名 类名,也就是程序的入口类的全类名 -
-argument arg
:要插入到fx:argumentJNLP 文件中的元素中的未命名参数。 -
-Bbundler-argument=value
: 向用于打包自包含应用程序的捆绑程序提供信息。有关每个捆绑器的参数的信息,请参阅自包含应用程序捆绑器的参数。 -
-callbacks
:在生成的 HTML 中指定用户回调方法。格式如下:“名称 1:值 1,名称 2:值 2,...” -
-description description
:应用程序的描述。 -
-embedCertificates
:如果存在,证书将嵌入 JNLP 文件中。 -
-embedjnlp
:如果存在,JNLP 文件将嵌入到 HTML 文档中。 -
-height height
:应用程序的高度。 -
-htmlparamfile file
:属性文件,其中包含在浏览器中运行时生成的应用程序的参数。 -
-isExtension
:如果存在,则将srcfiles
其视为扩展。 -
-name name
:应用程序的名称。 -
-native type
:生成独立的应用程序包(如果可能)。使用该-B
选项为正在使用的捆绑器提供参数。如果指定了类型,则仅创建此类型的捆绑包。如果未指定类型,all
则使用。 以下值对type有效:all
:为运行它的平台运行所有安装程序,并为应用程序创建磁盘映像。如果未指定类型,则使用此值。installer
:运行它所在平台的所有安装程序。image
:为应用程序创建磁盘映像。创建原生的镜像(打成window的exe)。exe
: 生成一个 Windows.exe
包。msi
:生成一个 Windows 安装程序包。
-
-outdir dir
:将接收生成的输出文件的目录的名称。 -
-outfile filename
:将生成的文件的名称(不带扩展名)。 -
-paramfile file
:具有默认命名应用程序参数的属性文件。 -
-preloader preloader-class
:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。 -
-srcdir dir
:要打包的文件的基本目录。就是我们之前包含jar文件的文件夹(注意这里不是java源代码目录) -
-srcfiles files
:-srcdir
选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。
20 -templateId
:模板处理应用的应用ID。
21 -templateInFilename
:HTML 模板文件的名称。占位符采用以下形式:#XXXX.YYYY(APPID)#
其中 APPID 是应用程序的标识符,XXX 是以下之一:
DT.SCRIPT.URL
dtjava.js 在部署工具包中的位置。默认情况下,位置是http://java.com/js/dtjava.jsDT.SCRIPT.CODE
包含部署工具包的 dtjava.js 的脚本元素。DT.EMBED.CODE.DYNAMIC
将应用程序嵌入给定占位符的代码。预计代码将被包装在function()
方法中。DT.EMBED.CODE.ONLOAD
使用钩子将应用程序嵌入网页所需的所有代码onload
(包含 dtjava.js 除外)。DT.LAUNCH.CODE
启动应用程序所需的代码。预计代码将被包装在function()
方法中。
22 -templateOutFilename
:将从模板生成的 HTML 文件的名称。
23 -title title
:应用程序的标题。
24 -vendor vendor
:应用程序的供应商。
25 -width width
:应用程序的宽度。
26 -updatemode update-mode
:设置 JNLP 文件的更新模式。
makeall 命令的选项
-
-appclass app-class
:要执行的应用程序类的限定名称。 -
-classpath files
:相关 JAR 文件名列表。 -
-height height
:应用程序的高度。 -
-name name
:应用程序的名称。 -
-preloader preloader-class
:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。 -
-width width
:应用程序的宽度。
signjar 命令的选项
-alias
:密钥的别名。-keyPass
:用于恢复密钥的密码。-keyStore file
:密钥库文件名。-outdir dir
:将接收生成的输出文件的目录的名称。-srcdir dir
:要签名的文件的基本目录。-srcfiles files
:-srcdir
选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。-storePass
:检查密钥库完整性或解锁密钥库的密码-storeType
:密钥库类型。默认值为“jks”。
应用程序捆绑的参数
这些自定义的bundle参数在使用的时候要注意,-B加上参数名=值 例如 icon 使用的时候就是 -Bicon=“path
该命令的-B
选项用于-deploy
指定用于创建自包含应用程序的捆绑程序的参数。每种类型的捆绑器都有自己的一组参数。
-
appVersion=version
:应用程序包的版本。一些捆绑器会限制版本字符串的格式。 -
classPath=path
:相对于组装的应用程序目录的类路径。javapackager该路径通常从 JAR 文件清单中提取,如果您使用其他命令,则不需要设置。 -
icon=path
:用于启动器和其他辅助的默认图标的位置。对于 Windows,格式必须为.ico. -
identifier=value
:用于其他平台特定值的默认值,例如mac.CFBundleIdentifier
. 建议使用反向 DNS 顺序,例如com.example.application.my-application
. - jvmOptions=option
:运行应用程序时传递给 JVM 的选项。
java可以使用对命令有效的任何选项。要传递多个选项,请使用该
-B选项的多个实例,如下例所示:
-BjvmOptions=-Xmx128m -BjvmOptions=-Xms128m` -
jvmProperties=property=value
:运行应用程序时要传递给 VM 的 Java 系统属性。可以使用-D
对命令选项有效的任何属性。java
指定属性名称和属性值。要传递多个属性,请使用该-B
选项的多个实例,如下例所示:-BjvmProperties=apiUserName=示例 -BjvmProperties=apiKey=abcdef1234567890
-
mainJar=filename
:包含应用程序主类的 JAR 文件的名称。javapackager
文件名通常从 JAR 文件清单中提取,如果您使用其他命令,则不需要设置。 -
preferencesID=node
:要检查的首选项节点以检查用户可以覆盖的 JVM 选项。指定的节点在运行时作为选项传递给应用程序-Dapp.preferences.id
。此参数与userJVMOptions
参数一起使用。 -
runtime=path
:运行时=路径要包含在包中的 JRE 或 JDK 的位置。提供 JDK 或 JRE 的根文件夹的文件路径。要使用系统默认的 JRE,请不要提供路径,如下例所示:-Bruntime=
-
serJvmOptions=option=value
:用户可以覆盖的 JVM 选项。java
可以使用对命令有效的任何选项。指定选项名称和选项的值。要传递多个选项,请使用该-B
选项的多个实例,如下例所示:-BuserJvmOptions=-Xmx=128m -BuserJvmOptions=-Xms=128m
Windows EXE Bundler 参数
-
copyright=string
:应用程序的版权字符串。字符串必须是不超过 100 个字符的单行。此参数用于各种 exe 和注册表元数据。 -
licenseFile=path
:捆绑商提供或记录的最终用户许可协议 (EULA) 的位置。该路径是相对于打包的应用程序资源的,例如-BlicenseFile=COPYING
. -
menuHint=boolean
:指示快捷方式是否安装在开始菜单或开始屏幕上的标志。设置为true
安装快捷方式。默认值为true
. -
ortcutHint=boolean
:指示快捷方式是否放置在桌面上的标志。设置为true
向桌面添加快捷方式。默认值为false
. -
systemWide=boolean
:指示应用程序是安装在 Program Files 中还是安装在用户主目录中的标准位置的标志。设置为true
在 Program Files 中安装应用程序。设置为false
将应用程序安装在用户的主目录中。默认值为false
. -
win.menuGroup=group
:何时安装应用程序的菜单menuHint
组true
。menuHint
当is时,该参数被忽略false
。 -
vendor=value
:提供申请的公司、组织或个人。此参数用于各种 exe 和注册表元数据。
Windows MSI Bundler 参数
-
menuHint=boolean
:指示快捷方式是否安装在开始菜单或开始屏幕上的标志。设置为true
安装快捷方式。默认值为true
. -
shortcutHint=boolean
:指示快捷方式是否放置在桌面上的标志。设置为true
向桌面添加快捷方式。默认值为false
. -
systemWide=boolean
:指示应用程序是安装在 Program Files 中还是安装在用户主目录中的标准位置的标志。设置为true
在 Program Files 中安装应用程序。设置为false
将应用程序安装在用户的主目录中。默认值为true
. -
win.menuGroup=group
:何时安装应用程序的菜单menuHint
组true
。menuHint
当is时,该参数被忽略false
。 -
vendor=value
:提供申请的公司、组织或个人。此参数用于各种 exe 和注册表元数据。
不推荐使用的选项
打包工具不再使用以下选项,如果存在则将其忽略。
-runtimeversion version
:所需 JavaFX 运行时的版本。已弃用。-noembedlauncher
:如果存在,打包程序不会将 JavaFX 启动器类添加到 JAR 文件中。已弃用。
-v
选项可以与任何任务命令一起使用以启用详细输出。 当-srcdir
命令中允许该选项时,它可以多次使用。如果指定了该选项,则将在前面选项-srcfiles
中指定的位置查找参数中命名的文件。srcdir
如果没有-srcdir
前面的 ,则使用执行命令-srcfiles
的目录。javapackager
例子
使用 -createjar 命令
代码语言:javascript复制javapackager -createjar -appclass package.ClassName -srcdir classes -outdir out -outfile outjar -v
classes将目录的内容打包为outjar.jar
,将应用程序类设置为package.ClassName
。
使用 -deploy 命令
代码语言:javascript复制javapackager -deploy -outdir outdir -outfile outfile -width 34 -height 43 -name AppName -appclass package.ClassName -v -srcdir compiled
为应用程序生成outfile.jnlp
和对应的outfile.html
文件,它由34 x 43 像素启动并具有尺寸。outdir``AppName``package.ClassName
使用 -makeall 命令
代码语言:javascript复制javapackager -makeall -appclass brickbreaker.Main -name BrickBreaker -width 600 -height 600
是否所有打包工作,包括编译createjar
、和deploy
.
使用 -signjar 命令
代码语言:javascript复制javapackager -signJar --outdir dist -keyStore sampleKeystore.jks -storePass **** -alias duke -keypass **** -srcdir dist
对目录中的所有 JAR 文件进行签名dist
,附加具有指定别名的证书,keyStore
然后storePass
将签名的 JAR 文件放回dist
目录中。
将 -deploy 命令与 Bundler 参数一起使用
代码语言:javascript复制javapackager -deploy -native exe -BsystemWide=true -BjvmOptions=-Xmx128m
-BjvmOptions=-Xms128m -outdir packages -outfile BrickBreaker -srcdir dist
-srcfiles BrickBreaker.jar -appclass brickbreaker.Main -name BrickBreaker
-title "BrickBreaker demo"
生成本机 Windows EXE 包,用于将 BrickBreaker 应用程序作为自包含应用程序运行。
代码语言:javascript复制javapackager -deploy -native -outdir packages -outfile md5 -srcfiles md5.jar -appclass com.sysware.md5.MyFrame -name md5
生成本机安装包(在linux下生成deb,在windows下生成exe,在mac下生成dkg),用于将 md5.jar 应用程序作为自包含应用程序运行。
分析一下
代码语言:javascript复制javapackager---java8自带的打包程序
-deploy---用来构建目标机器的发行版本,简单说就是打包成exe或者其他平台的包,如果不带任何参数,会生成一个基本的应用程序,不建议不带任何参数
-native image---为jar创建磁盘镜像(可以将image替换为其他的类型,例如exe,msi,deb,rpm,dmg,pkg,省略就是该系统支持的文件格式)
-outdir packages---输出目录。
-outfile md5----输出文件(不要带后缀,比如md5.exe,就写md5就行了)。
-srcfiles md5.jar---要打包的jar文件。
-appclass com.sysware.md5.MyFrame---jar文件的主类的全限定名。(注意是全限定名)
-name md5---启动之后的应用名称
文章翻译自:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javapackager.html
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: 2022/09/08 20:26