我正在打包我的软件,想知道 JRE 的安装是如何工作的。它是简单地复制本地系统上的二进制文件并相应地设置类路径,还是由安装程序完成任何其他步骤?
对于 Windows,JRE 二进制文件存储在C:\Program Files\Java\jre7
我可以将此文件夹复制到其他机器(具有相同的 32 位或 64 位处理器)以使 JRE 工作。如果是这样,那么需要设置哪些环境变量?
我正在打包我的软件,想知道 JRE 的安装是如何工作的。它是简单地复制本地系统上的二进制文件并相应地设置类路径,还是由安装程序完成任何其他步骤?
对于 Windows,JRE 二进制文件存储在C:\Program Files\Java\jre7
我可以将此文件夹复制到其他机器(具有相同的 32 位或 64 位处理器)以使 JRE 工作。如果是这样,那么需要设置哪些环境变量?
我可以将此文件夹复制到其他机器(具有相同的 32 位或 64 位处理器)以使 JRE 工作吗
是没有问题。除非您还想注册 .jar 扩展名以便可以双击它们。
在这种情况下,请查看ftype
andassoc
命令。他们可以这样做,例如从批处理文件或安装程序中。
如果是这样,那么需要设置哪些环境变量?
无需设置任何环境变量。
只需确保在启动应用程序时(例如通过批处理文件)正确限定 javaw.exe(或 java.exe)的路径。
您可以将整个 JRE 放在一个子目录中,然后根据子目录引用 java.exe。其他产品经常这样做。
您不需要设置任何环境变量。
更新
如果这是一个不是 JRE 工具包的商业应用程序(即 Maven 或 Ant 之类的东西),请不要依赖全局环境变量 JAVA_HOME、PATH 或 CLASSPATH 来设置。如果您想创建一个批处理文件,该文件在运行时会自动在您的应用程序的上下文中进行设置,那将可以正常工作。但不要依赖它们在系统中进行设置。
只需有人更改这些以使用某些版本的 1.7 或 1.8 beta 或真正的 JRE 的任何子版本来破坏您的应用程序,然后您将收到有关您的应用程序破坏的客户支持电话,当真的他们所做的是将他们的 JAVA_HOME 更改为荒谬的东西,因为他们误读了 Ant 文档。
如果您提供与 JDK 结合使用的工具集,例如 Ant 或 Maven,您可能希望使用它们安装的任何 JRE/JDK,因为这就是您的工具的重点。
简短的版本是,这取决于。但在大多数情况下,二进制兼容性和库路径的限制足以让 JRE 在共享环境中工作(就像我们在工作中的一些机器上所做的那样)。
因为 Java 提供了一个虚拟机来处理请求,并且因为它可以完全独立于系统拥有的其他一些花里胡哨,所以你对它的类路径和二进制配置的直觉是正确的。但是,对于需要格式良好且系统特定的路径和库集的库,您可能会遇到问题,这些路径和库在第三方库提供的某些 OS 包中提供。
简而言之:如果您可以选择从其安装程序安装 Java,因为这将保证所有类路径详细信息、所有库、所有日志记录工具和所有特定于系统的勘误表都被考虑在内,尽管正如 Andrew Finnell 指出的那样,您还是需要手动设置环境变量。大多数需求只需要其中的一个严格子集(请参阅其他答案),但在界定此类问题时,最有趣的是极端情况。
如果您不指定任何参数,JRE 安装程序会安装所需的二进制文件和可执行文件,但还会创建所需的 Windows 注册表项来配置您的 JRE 安装。
您还可以使用“-static”选项进行安装(请参阅 JRE 安装程序文档),在这种情况下,除了将文件复制到指定路径之外,不会执行任何其他操作。
然后,您将需要手动设置环境变量。对于命令行,最常见的有:PATH、JAVA_HOME 和 CLASSPATH。