Done:Bullshit!不能用来精简JRE,GAME OVER ~

本章讲述如何使用 jrecreate 工具创建自己的 Java 运行环境,包括如下内容:

运行 jrecreate

你需要在电脑上运行 jrecreate,然后将生成的 JRE 拷贝到需要集成的目标设备。

注意:jrecreate 运行的时候需要将近 1G 的可用内存。

jrecreate 命令语法 {#jrecreate-Command——Syntax}

jrecreate --dest host-destination-directory [options]

jrecreate 参数选项

这些参数都是可选项,但有一个参数必须进行特殊指定 —— 目标文件夹,也就是生成的 JRE 保存在什么地方。

注意:请注意,所有可选项的长格式之前是双连字符(短格式之前是单连字符)。

另外:打包 ARM Swing/AWT 的时候,有些可选参数暂不支持, 详见Configuring the JRE for Swing/AWT Headful Applications

-h
--help

帮助:查看 jrecreate 的语法和支持的参数

-d path
--dest path

文件夹:必选项,指定写入 JRE 镜像和关联文件的位置,且此文件夹当前不存在。

-p profile
--profile profile

配置文件:默认,全部 JRE API。

可选项有三个:

  • compact1 (大约12MB)
  • compact2 (17MB)
  • compact3 (24M)
  • 默认 (50MB)
compact1                     compact2                    compact3
--------------------------   -----------------------     --------------------------
java.io                      java.rmi                    java.lang.instrument
java.lang                    java.rmi.activation         java.lang.management
java.lang.annotation         java.rmi.registry           java.security.acl
java.lang.invoke             java.rmi.server             java.util.prefs
java.lang.ref                java.sql                    javax.annotation.processing
java.lang.reflect            javax.rmi.ssl               javax.lang.model
java.math                    javax.sql                   javax.lang.model.element
java.net                     javax.transaction           javax.lang.model.type
java.nio                     javax.transaction.xa        javax.lang.model.util
java.nio.channels            javax.xml                   javax.management
java.nio.channels.spi        javax.xml.datatype          javax.management.loading
java.nio.charset             javax.xml.namespace         javax.management.modelbean
java.nio.charset.spi         javax.xml.parsers           javax.management.monitor
java.nio.file                javax.xml.stream            javax.management.openmbean
java.nio.file.attribute      javax.xml.stream.events     javax.management.relation
java.nio.file.spi            javax.xml.stream.util       javax.management.remote
java.security                javax.xml.transform         javax.management.remote.rmi
java.security.cert           javax.xml.transform.dom     javax.management.timer
java.security.interfaces     javax.xml.transform.sax     javax.naming
java.security.spec           javax.xml.transform.stax    javax.naming.directory
java.text                    javax.xml.transform.stream  javax.naming.event
java.text.spi                javax.xml.validation        javax.naming.ldap
java.util                    javax.xml.xpath             javax.naming.spi
java.util.concurrent         org.w3c.dom                 javax.script
java.util.concurrent.atomic  org.w3c.dom.bootstrap       javax.security.auth.kerberos
java.util.concurrent.locks   org.w3c.dom.events          javax.security.sasl
java.util.jar                org.w3c.dom.ls              javax.sql.rowset
java.util.logging            org.xml.sax                 javax.sql.rowset.serial
java.util.regex              org.xml.sax.ext             javax.sql.rowset.spi
java.util.spi                org.xml.sax.helpers         javax.tools
java.util.zip                                            javax.xml.crypto
javax.crypto                                             javax.xml.crypto.dom
javax.crypto.interfaces                                  javax.xml.crypto.dsig
javax.crypto.spec                                        javax.xml.crypto.dsig.dom
javax.net                                                javax.xml.crypto.dsig.keyinfo
javax.net.ssl                                            javax.xml.crypto.dsig.spec
javax.security.auth                                      org.ieft.jgss
javax.security.auth.callback
javax.security.auth.login
javax.security.auth.spi
javax.security.auth.x500
javax.security.cert




--vm jvm

VM:可选项,如果 vm 和 profile 都没有指定,那么所有的 JVMs 都会打包到 JRE。

可选项: - minimal - client - server (if available for the target computer) - all (all available for the target computer)

如果没有指定 VM 这个参数,那么就会按照指定的 profile 对应的参数来运行: - compact1: minimal - compact2: minimal - compact3: client

-x extension [,extension ...]
--extension extension [,extension ...]

没有默认值,

添加可选组件到 JRE 的方式有两种: - 多个指令 --extension sunec \ --extension sunpkcs11 - 单个指令,多个参数 --extension sunec,sunpkcs11

可以被添加的组件有: - fx:graphics - fx:controls - sunec - sunpkcs11 - locales - charsets - nashorn

-g
--debug

调试:运行时候对应用的DEBUG支持,默认不支持。

注意: - minimal JVM 下不能使用本参数,如果指定本参数,那么就会生成 client JVM。 - DEBUG 的时候,需要指定 -XX:+UsePerfData 参数,此参数默认是关闭状态。

-k
--keep-debug-info

调试信息:默认不支持。

--no-compression

压缩:默认压缩。

-n
--dry-run

生成报告:默认生成 JRE。使用此命令就会生成报告,而不生成 JRE。

-v
--verbose

生成JRE的实时日志:默认,否。

--ejdk-home path

Optional. Default: value of EJDK_HOME environment variable if set; otherwise /ejdk

jrecreate 命令范例

Example 1

Smallest JRE: headless, compact1 profile, minimal JVM (default for compact1).

% installDir/ejdk<version>/bin/jrecreate.sh \
--profile compact1 \
--dest /tmp/defaultJRE/

Example 2

compact2 profile, client JVM with debugging support.

% installDir/ejdk<version>/bin/jrecreate.sh \
    --dest /tmp/exampleJRE1/ \
    --profile compact2 \
    --vm client \ 
    --keep-debug-info \
    --debug

Example 3

JavaFX controls and Java SE locales added to server JVM and compact3 profile.

% installDir/ejdk<version>/bin/jrecreate.sh \
    --dest /tmp/exampleJRE2 \
    --profile compact3 \
    --vm server \
    --extension fx:controls \
    --extension locales 

Example 4

Full JRE APIs, all JVMs (default).

% installDir/ejdk<version>/bin/jrecreate.sh \
    --dest /tmp/exampleJRE3 

jrecreate 命令输出结果

执行时显示信息如下:

Building JRE using options Options {
    ejdk-home: /home/xxxx/ejdk/ejdk<version>
    dest: /tmp/testjre
    target: linux_i586
    vm: minimal
    runtime: compact1 profile
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: []
}

JRE 文件夹

指定完毕之后就会在目标文件夹出现如下的文件夹:

  • bin/: Target-native commands, minimally including the java JRE application launcher. The complement of tools varies according to the value of the –profile option.
  • lib/: The files that make up the core of the JRE, including classes, JVMs, time zone information, and other resources.
  • release: A text file that tools can read to obtain attributes of the generated JRE, such as the Java version, profile name (if applicable), operating system name, and CPU architecture.
  • bom: A text file that documents how the JRE was created, including the jrecreate command options and the files that the command used.
  • COPYRIGHT, LICENSE, README, THIRDPARTYLICENSEREADME.txt: Legal and other documentation. Present only if –profile is not specified (full JRE APIs).

配置 Swing/AWT 版本的 JRE

参考资料