Oracle Java 部署团队关于微调应用程序包的本机打包指南包含有关如何自定义 JRE 片段以包含在自包含应用程序中的说明。
如果原始链接失效,我将在此处复制并粘贴相关部分:
如果您使用打包工具来生成可安装的包,则可能需要在将应用程序映像打包到安装程序之前对其进行调整。为什么?例如,您可能想要签署应用程序,因此它似乎不受操作系统的信任(例如,为了取悦 Mac OS X Gatekeeper)。
此外,默认情况下,自包含应用程序不包含 Java 运行时的完整副本。我们只包括一组强制性组件。采用这种方法的部分原因是我们希望减小封装尺寸。但是,在某些情况下,您的应用程序可能依赖于这些可选组件,在这种情况下,您需要一种将它们添加到私有运行时的方法。例如,如果缺少 jre/lib/ext/sunjce_provider.jar,则 https 连接将不起作用。
目前,这可以通过提供在填充应用程序映像后执行的自定义配置脚本来实现。与上面带有图标的示例一样,您需要启用详细输出以查找脚本文件的名称,然后将其拖放到打包工具可以找到它的位置。请注意,脚本语言也是特定于平台的。目前我们只支持 Mac/Linux 的 shell 和 windows 上的 Windows Script。
您如何找出应用程序图像的位置?当前自定义脚本在存储配置文件的目录中运行,但可以使用相对平台特定路径访问应用程序映像。您可以从详细输出或通过将环境变量 JAVAFX_ANT_DEBUG 设置为 true 来获取此路径以保留中间构建工件。
这是示例脚本(由 John Petersen 提供),您可以使用该脚本将 jre/lib/ext/sunjce_provider.jar 添加到 Windows 平台上 MyApp 的应用程序包中。使用 Javascript 编写脚本,但您也可以使用 VBScript 编写 Windows 脚本。
<?xml version="1.0" ?>
<package>
<job id="postImage">
<script language="JScript">
<![CDATA[
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFolder = oFSO.getFolder(".");
var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar";
var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext";
if (!oFSO.FolderExists(to)) {
oFSO.CreateFolder(to);
}
to += "\\";
oFSO.CopyFile(from, to);
]]>
</script>
</job>
</package>
上面讨论了将sunjce_provider.jar
文件从 JRE 安装复制到应用程序包,但复制任何其他文件的过程,包括java.exe
应该类似。
JavaFX 部署指南中有关如何最初创建要定制的捆绑包的更多详细信息。