使用javapackager打包各系统安装包

/ 默认分类 / 没有评论 / 1333浏览

在平时我们打包会将其打成Jar,那么在其他平台运行的时候就需要安装jre来支持运行。我们用的是javapackager,javapackager是jdk1.8自带的一个打包工具,可以生成各个系统的安装包

准备工作

用法

javapackager  command  [options]

command :应该执行的任务

[options] :以空格分隔的命令的一个或多个选项

Commands

您可以指定以下命令之一。在命令之后,指定它的选项。

  1. -createbss:将 CSS 文件转换为二进制形式。
  2. -createjar:根据其他参数生成 JAR 存档。
  3. -deploy:组装应用程序包以进行重新分发。默认情况下,部署任务会生成基础应用程序包,但如果需要,它也可以生成自包含的应用程序包。
  4. -makeall:使用预定义的大多数参数,一次调用执行编译、createjardeploy步骤,并尝试生成所有适用的自包含应用程序包。源文件必须位于名为 的文件夹src中,生成的文件(JAR、JNLP、HTML 和自包含应用程序包)位于名为 的文件夹中dist。此命令只能以最少的方式配置,并且尽可能自动化。
  5. -signjar:使用提供的证书对 JAR 文件进行签名。

createbss 命令的选项

  1. -outdir dir: 将接收生成的输出文件的目录的名称。

  2. -srcdir dir:要打包的文件的基本目录。

  3. -srcfiles files:-srcdir选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。

createjar 命令的选项

  1. -appclass app-class:要执行的应用程序类的限定名称。

  2. -argument arg:要作为<fx:argument>元素插入到 JNLP 文件中的未命名参数。

  3. -classpath files:相关 JAR 文件名列表。

  4. -manifestAttrs manifest-attributes:其他清单属性的名称和值列表。句法:“名称 1=值 1,名称 2=值 2,名称 3=值 3”

  5. -nocss2bin:打包器在复制到 JAR 之前不会将 CSS 文件转换为二进制形式。

  6. -outdir dir:将接收生成的输出文件的目录的名称。

  7. -outfile filename:将生成的文件的名称(不带扩展名)。

  8. -paramfile file:具有默认命名应用程序参数的属性文件。

  9. -preloader preloader-class:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。

  10. -srcdir dir:要打包的文件的基本目录。

  11. -srcfiles files:-srcdir选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。

deploy命令的选项

  1. -allpermissions:如果存在,应用程序将需要 JNLP 文件中的所有安全权限。

  2. -appclass app-class:要执行的应用程序类的限定名称。 就是详细包名+类名,也就是程序的入口类的全类名

  3. -argument arg:要插入到fx:argumentJNLP 文件中的元素中的未命名参数。

  4. -Bbundler-argument=value: 向用于打包自包含应用程序的捆绑程序提供信息。有关每个捆绑器的参数的信息,请参阅自包含应用程序捆绑器的参数。

  5. -callbacks:在生成的 HTML 中指定用户回调方法。格式如下:“名称 1:值 1,名称 2:值 2,...”

  6. -description description:应用程序的描述。

  7. -embedCertificates:如果存在,证书将嵌入 JNLP 文件中。

  8. -embedjnlp:如果存在,JNLP 文件将嵌入到 HTML 文档中。

  9. -height height:应用程序的高度。

  10. -htmlparamfile file:属性文件,其中包含在浏览器中运行时生成的应用程序的参数。

  11. -isExtension:如果存在,则将srcfiles其视为扩展。

  12. -name name:应用程序的名称。

  13. -native type:生成独立的应用程序包(如果可能)。使用该-B选项为正在使用的捆绑器提供参数。如果指定了类型,则仅创建此类型的捆绑包。如果未指定类型,all则使用。

    以下值对type有效:

    • all:为运行它的平台运行所有安装程序,并为应用程序创建磁盘映像。如果未指定类型,则使用此值。
    • installer:运行它所在平台的所有安装程序。
    • image:为应用程序创建磁盘映像。创建原生的镜像(打成window的exe)。
    • exe: 生成一个 Windows.exe包。
    • msi:生成一个 Windows 安装程序包。
  14. -outdir dir:将接收生成的输出文件的目录的名称。

  15. -outfile filename:将生成的文件的名称(不带扩展名)。

  16. -paramfile file:具有默认命名应用程序参数的属性文件。

  17. -preloader preloader-class:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。

  18. -srcdir dir:要打包的文件的基本目录。就是我们之前包含jar文件的文件夹(注意这里不是java源代码目录)

  19. -srcfiles files:-srcdir选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。

20 -templateId:模板处理应用的应用ID。

21 -templateInFilename:HTML 模板文件的名称。占位符采用以下形式:#XXXX.YYYY(APPID)#

	其中 APPID 是应用程序的标识符,XXX 是以下之一:

22 -templateOutFilename:将从模板生成的 HTML 文件的名称。

23 -title title:应用程序的标题。

24 -vendor vendor:应用程序的供应商。

25 -width width:应用程序的宽度。

26 -updatemode update-mode:设置 JNLP 文件的更新模式。

makeall 命令的选项

  1. -appclass app-class:要执行的应用程序类的限定名称。

  2. -classpath files:相关 JAR 文件名列表。

  3. -height height:应用程序的高度。

  4. -name name:应用程序的名称。

  5. -preloader preloader-class:要执行的 JavaFX 预加载器类的限定名称。此选项仅用于 JavaFX 应用程序。不要用于 Java 应用程序,包括无头应用程序。

  6. -width width:应用程序的宽度。

signjar 命令的选项

  1. -alias:密钥的别名。
  2. -keyPass:用于恢复密钥的密码。
  3. -keyStore file:密钥库文件名。
  4. -outdir dir:将接收生成的输出文件的目录的名称。
  5. -srcdir dir:要签名的文件的基本目录。
  6. -srcfiles files:-srcdir选项指定的目录中的文件列表。如果省略,将使用目录中的所有文件(在这种情况下这是一个强制参数)。列表中的文件必须用空格分隔。
  7. -storePass:检查密钥库完整性或解锁密钥库的密码
  8. -storeType:密钥库类型。默认值为“jks”。

应用程序捆绑的参数

这些自定义的bundle参数在使用的时候要注意,-B加上参数名=值 例如 icon 使用的时候就是 -Bicon=“path

该命令的-B选项用于-deploy指定用于创建自包含应用程序的捆绑程序的参数。每种类型的捆绑器都有自己的一组参数。

  1. appVersion=version:应用程序包的版本。一些捆绑器会限制版本字符串的格式。

  2. classPath=path :相对于组装的应用程序目录的类路径。javapackager该路径通常从 JAR 文件清单中提取,如果您使用其他命令,则不需要设置。

  3. icon=path:用于启动器和其他辅助的默认图标的位置。对于 Windows,格式必须为.ico.

  4. identifier=value:用于其他平台特定值的默认值,例如mac.CFBundleIdentifier. 建议使用反向 DNS 顺序,例如com.example.application.my-application.

  5. jvmOptions=option:运行应用程序时传递给 JVM 的选项。java可以使用对命令有效的任何选项。要传递多个选项,请使用该-B选项的多个实例,如下例所示:-BjvmOptions=-Xmx128m -BjvmOptions=-Xms128m`

  6. jvmProperties=property=value:运行应用程序时要传递给 VM 的 Java 系统属性。可以使用-D对命令选项有效的任何属性。java指定属性名称和属性值。要传递多个属性,请使用该-B选项的多个实例,如下例所示:-BjvmProperties=apiUserName=示例 -BjvmProperties=apiKey=abcdef1234567890

  7. mainJar=filename:包含应用程序主类的 JAR 文件的名称。javapackager文件名通常从 JAR 文件清单中提取,如果您使用其他命令,则不需要设置。

  8. preferencesID=node:要检查的首选项节点以检查用户可以覆盖的 JVM 选项。指定的节点在运行时作为选项传递给应用程序-Dapp.preferences.id。此参数与userJVMOptions参数一起使用。

  9. runtime=path:运行时=路径要包含在包中的 JRE 或 JDK 的位置。提供 JDK 或 JRE 的根文件夹的文件路径。要使用系统默认的 JRE,请不要提供路径,如下例所示:-Bruntime=

  10. serJvmOptions=option=value:用户可以覆盖的 JVM 选项。java可以使用对命令有效的任何选项。指定选项名称和选项的值。要传递多个选项,请使用该-B选项的多个实例,如下例所示:-BuserJvmOptions=-Xmx=128m -BuserJvmOptions=-Xms=128m

Windows EXE Bundler 参数

  1. copyright=string:应用程序的版权字符串。字符串必须是不超过 100 个字符的单行。此参数用于各种 exe 和注册表元数据。

  2. licenseFile=path:捆绑商提供或记录的最终用户许可协议 (EULA) 的位置。该路径是相对于打包的应用程序资源的,例如-BlicenseFile=COPYING.

  3. menuHint=boolean:指示快捷方式是否安装在开始菜单或开始屏幕上的标志。设置为true安装快捷方式。默认值为true.

  4. ortcutHint=boolean:指示快捷方式是否放置在桌面上的标志。设置为true向桌面添加快捷方式。默认值为false.

  5. systemWide=boolean:指示应用程序是安装在 Program Files 中还是安装在用户主目录中的标准位置的标志。设置为true在 Program Files 中安装应用程序。设置为false将应用程序安装在用户的主目录中。默认值为false.

  6. win.menuGroup=group:何时安装应用程序的菜单menuHinttruemenuHint当is时,该参数被忽略false

  7. vendor=value:提供申请的公司、组织或个人。此参数用于各种 exe 和注册表元数据。

Windows MSI Bundler 参数

  1. menuHint=boolean:指示快捷方式是否安装在开始菜单或开始屏幕上的标志。设置为true安装快捷方式。默认值为true.

  2. shortcutHint=boolean:指示快捷方式是否放置在桌面上的标志。设置为true向桌面添加快捷方式。默认值为false.

  3. systemWide=boolean:指示应用程序是安装在 Program Files 中还是安装在用户主目录中的标准位置的标志。设置为true在 Program Files 中安装应用程序。设置为false将应用程序安装在用户的主目录中。默认值为true.

  4. win.menuGroup=group:何时安装应用程序的菜单menuHinttruemenuHint当is时,该参数被忽略false

  5. vendor=value:提供申请的公司、组织或个人。此参数用于各种 exe 和注册表元数据。

不推荐使用的选项

打包工具不再使用以下选项,如果存在则将其忽略。

  1. -runtimeversion version:所需 JavaFX 运行时的版本。已弃用。
  2. -noembedlauncher:如果存在,打包程序不会将 JavaFX 启动器类添加到 JAR 文件中。已弃用。

-v选项可以与任何任务命令一起使用以启用详细输出。

-srcdir命令中允许该选项时,它可以多次使用。如果指定了该选项,则将在前面选项-srcfiles中指定的位置查找参数中命名的文件。srcdir如果没有-srcdir前面的 ,则使用执行命令-srcfiles的目录。javapackager

例子

使用 -createjar 命令

javapackager -createjar -appclass package.ClassName -srcdir classes -outdir out -outfile outjar -v

classes将目录的内容打包为outjar.jar,将应用程序类设置为package.ClassName

使用 -deploy 命令

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 命令

javapackager -makeall -appclass brickbreaker.Main -name BrickBreaker -width 600 -height 600

是否所有打包工作,包括编译createjar、和deploy.

使用 -signjar 命令

javapackager -signJar --outdir dist -keyStore sampleKeystore.jks -storePass **** -alias duke -keypass **** -srcdir dist

对目录中的所有 JAR 文件进行签名dist,附加具有指定别名的证书,keyStore然后storePass将签名的 JAR 文件放回dist目录中。

将 -deploy 命令与 Bundler 参数一起使用

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 应用程序作为自包含应用程序运行。

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 应用程序作为自包含应用程序运行。

分析一下

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