1. EJDK 简介

EJDK(嵌入式 Java 开发工具包)是 Oracle 推出的解决方案,旨在解决为所有嵌入式平台提供二进制文件的问题。我们可以从 Oracle 官网 下载最新版 EJDK。

简单来说,它包含创建平台特定 JRE 的核心工具。

2. jrecreate 工具

EJDK 提供了两个平台适配的脚本:

  • Windows 系统:jrecreate.bat
  • Unix/Linux 系统:jrecreate.sh

这个工具的核心价值在于: ✅ 减少 Oracle 官方发布的二进制包数量简化自定义 JRE 创建流程

命令执行语法:

# Unix/Linux
$jrecreate.sh -<option>/--<option> <argument-if-any>

# Windows
$jrecreate.bat -<option>/--<option> <argument-if-any>

⚠️ 支持在单次命令中组合多个选项。下面我们重点解析常用选项。

3. jrecreate 核心选项

3.1. 目标目录 (-d)

这是必选参数,用于指定 JRE 的生成路径:

$jrecreate.sh -d /SampleJRE

执行后会创建默认配置的 JRE,控制台输出示例:

Building JRE using Options {
    ejdk-home: /installDir/ejdk1.8.0/bin/..
    dest: /SampleJRE
    target: linux_i586
    vm: all
    runtime: jre
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: []
}

Target JRE Size is 55,205 KB (on disk usage may be greater).
Embedded JRE created successfully

从输出可见,所有未显式指定的选项都采用了默认值。

3.2. 配置文件 (-p)

用于控制 JRE 体积,通过预定义的 Profile 限制包含的 API 范围:

$jrecreate.sh -d /SampleJRECompact1/ -p compact1

将创建包含 compact1 配置的轻量级 JRE,输出示例:

Building JRE using Options {
    ejdk-home: /installDir/ejdk1.8.0/bin/..
    dest: /SampleJRECompact1
    target: linux_i586
    vm: minimal
    runtime: compact1 profile
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: []
}

Target JRE Size is 10,808 KB (on disk usage may be greater).
Embedded JRE created successfully

关键变化:

  • runtime 值变为 compact1
  • JRE 体积从 55MB 锐减至 11MB

可用 Profile 级别:

  1. compact1 (最小集)
  2. compact2 (扩展集)
  3. compact3 (完整集)

3.3. JVM 类型 (--vm)

按需定制 JVM 实现:

$jrecreate.sh -d /SampleJREClientJVM/ --vm client

输出示例:

Building JRE using Options {
    ejdk-home: /installDir/ejdk1.8.0/bin/..
    dest: /SampleJREClientJVM
    target: linux_i586
    vm: Client
    runtime: jre
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: []
}

Target JRE Size is 46,217 KB (on disk usage may be greater).
Embedded JRE created successfully

支持的 JVM 类型:

  • client (客户端优化)
  • server (服务端优化)
  • minimal (极简实现)

3.4. 扩展组件 (-x)

用于添加预定义的扩展模块:

$jrecreate.sh -d /SampleJRESunecExt/ -x sunec

输出示例:

Building JRE using Options {
    ejdk-home: /installDir/ejdk1.8.0/bin/..
    dest: /SampleJRESunecExt
    target: linux_i586
    vm: all
    runtime: jre
    debug: false
    keep-debug-info: false
    no-compression: false
    dry-run: false
    verbose: false
    extension: [sunec]
}

Target JRE Size is 55,462 KB (on disk usage may be greater).
Embedded JRE created successfully

示例中添加了 sunec(椭圆曲线加密安全提供程序),支持通过逗号分隔添加多个扩展。

3.5. 其他实用选项

选项 功能
--help 显示命令帮助
--debug 创建包含调试支持的 JRE
--keep-debug-info 保留类文件和未签名 JAR 的调试信息
--dry-run 模拟运行不实际生成 JRE
--no-compression 禁用未签名 JAR 的压缩
--verbose 显示详细执行日志

4. 总结

本文介绍了 EJDK 的基本概念,以及如何使用 jrecreate 工具构建平台特定的 JRE。关键要点:

  • 通过 -p 选项可显著减少 JRE 体积(最高减少 80%)
  • 组合 --vm-x 选项能精准控制功能集
  • --dry-run 选项在预演阶段尤其实用

这些功能在嵌入式开发和容器化部署中能有效解决资源占用问题,避免全量 JRE 的臃肿开销。


原始标题:Exploring jrecreate