我一直在将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应用程序?显然我不知道某些事情(很可能),或者指示是完全错误的。
答案 0 :(得分:2)
使用自定义启动器将Microsoft Windows上的JRE重新分发为私有应用程序运行时(其他应用程序无法访问)时,以下文件也是可选的。
如果在自己的应用程序中嵌入JVM(通过链接其共享库),则不需要独立的启动程序可执行文件。例如,我认为Eclipse就是这样工作的。
如果您的应用使用java可执行文件(例如通过批处理文件),那么您当然需要它们。
答案 1 :(得分:1)
虽然这与问题没有严格关系,但对于删除“不需要的代码”的整个程序(或整个平台)优化,我发现ProGuard是一个很好的工具。 YMMV。
答案 2 :(得分:0)