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

时间:2010-11-26 07:49:15

标签: installation java

我一直在将JRE与我的应用捆绑在一起,只需将文件从$JAVA_HOME/jre复制到我应用的发行版即可。这可能违背了Java的精神,但它通过确保我的应用程序在经过测试的JRE版本上运行来减少潜在问题(包括比特;我使用一些JNI,它要求JRE是32位版本)。

它工作正常,但整个发行版有点大,所以可能会遗漏一些不必要的文件?实际上,$JAVA_HOME/jre/README.txt包含以下建议:

  

组成Java SE运行时环境的文件分为   两类:必需和可选。可以排除可选文件   来自Java SE运行时环境的重新分发   供应商的自由裁量权。

     

以下部分包含文件和目录的列表   可以选择使用Java SE Runtime从重新分发中省略   环境。不在这些可选文件列表中的所有文件必须是   包含在运行时环境的重新分发中。

     

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

让我感到困惑的是,可选文件列表包括:

bin\java.exe
bin\javaw.exe
bin\javaws.exe

java/javaw.exe如何可选?如果没有它们我应该如何启动Java应用程序?显然我不知道某些事情(很可能),或者指示是完全错误的。

3 个答案:

答案 0 :(得分:2)

  

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

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

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

答案 1 :(得分:1)

虽然这与问题没有严格关系,但对于删除“不需要的代码”的整个程序(或整个平台)优化,我发现ProGuard是一个很好的工具。 YMMV。

答案 2 :(得分:0)

如何使用像launch4j这样的工具将其转换为可执行文件? 您找到的其他一些建议here(不在接受的答案中)