剥离JRE以与应用程序捆绑-我可以省略什么?

9
我一直通过将文件从$JAVA_HOME/jre复制到我的应用程序分发中来捆绑JRE。这可能违背了Java的精神,但它通过确保我的应用程序在测试过JRE版本上运行(包括位数;我使用一些需要32位版本JRE的JNI)来减少潜在的问题。
它可以正常运行,但整个分发有点大,因此可能可以省略一些不必要的文件吗?实际上,$JAVA_HOME/jre/README.txt包含以下建议:
引用:

组成Java SE Runtime Environment的文件分为两类:必选和可选。 可选文件可以根据供应商的判断从Java SE Runtime Environment的再分发中排除。

以下部分列出了可能可以从Java SE Runtime Environment的再分发中省略的文件和目录的列表。 不包含在这些可选文件列表中的所有文件都必须包含在运行时环境的再分发中。

...将JRE作为私有应用程序运行时(其他应用程序无法访问)在Microsoft Windows上重新分发时,以下文件也是可选的。 这些是在Internet Explorer和Mozilla系列浏览器中用于Java支持的库和可执行文件; 这些文件在私有JRE再分发中不需要。

令我困惑的是,可选文件列表中包括:
bin\java.exe
bin\javaw.exe
bin\javaws.exe

Java/Javaw.exe怎么可能是可选的?如果没有它们,我该如何启动Java应用程序呢?很明显我不知道某些东西(很可能),或者说明书就是错的。


1
你可能会对以下页面感兴趣:https://dev59.com/DnE95IYBdhLWcg3wkeof - Thilo
2个回答

2

当在Microsoft Windows上将JRE作为私有应用程序运行时(不可被其他应用程序访问)并使用自定义启动器进行重新分发时,以下文件也是可选的。

如果您将JVM(通过链接到其共享库)嵌入自己的应用程序中,则不需要独立的启动器可执行文件。例如,我认为Eclipse就是这样工作的。

如果您的应用程序使用java可执行文件(例如通过批处理文件),那么当然需要它们。


好的,java.exe 只是一种启动器,而有些启动器(比如 launch4j)可能包含类似的功能? - Joonas Pulakka
我没有使用过launch4j,但是他们网站上的图片看起来很像可以做到这一点。 - Thilo

1

虽然这与问题没有直接关系,但对于整个程序(或整个平台)优化以删除“不必要的代码”,我发现ProGuard是一个很好的工具。你的情况可能有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接