在Windows下同时运行多个Java版本

我们有几个在Java 5上运行的应用程序,现在想要引入一个基于Java 6的应用程序。两个java版本可以在Windows下一起使用吗?

是否有任何控制面板为不同的应用程序设置适当的Java版本,或者有其他方式来设置,将使用哪个版本的Java来运行特定的应用程序?

当然,你可以在Windows下使用多个版本的Java。 不同的应用程序可以使用不同的Java版本。 你的应用程序如何启动? 通常你会有一个batch file,如果有的话

java ... 

这将使用PATHvariablessearchJava可执行文件。 所以,如果Java 5首先在PATH上运行,那么在运行Java 6应用程序时会遇到问题。 然后,您应该修改batch file以使用特定的Java版本,例如通过定义具有值C:\java\java6 JAVA6HOME的环境variablesJAVA6HOME (如果在此目录中安装了Java 6)并更改batch file调用

 %JAVA6HOME%\bin\java ... 

并行安装几个JRE / JDK版本是完全可能的。 而且,您不必为此发生任何特殊的事情,因为Sun正在为每个文件夹(在Program Files下)创build一个不同的文件夹。

没有控制面板来检查哪个JRE适用于每个应用程序。 基本上,将工作的JRE将是您的PATH环境variables中的第一个。 你可以改变它,或者JAVA_HOMEvariables,或者创build特定的cmd / bat文件来启动你想要的应用程序,每个应用程序都有一个不同的JREpath。

我对Windows中的CLASSPATH,JAVA_HOME和PATH想法的笨拙感到震惊,以跟踪Java文件。 我到了这里,因为有多个JRE,以及如何满足它。 在没有反馈信息的情况下,从一个比我更聪明的人那里,我宁愿指出他在这个问题上的文章,对我来说,这个文章完美地解决了这个问题。

文章:Ted Neward: 多个Java家园:给Java应用程序自己的JRE

随着Java的指数级增长,服务器端开发语言在Java开发工具,环境,框架和扩展中已经呈现出等价的指数级增长。 不幸的是,并不是所有这些工具都可以在相同的Java VM安装下很好地结合在一起。 有些需要符合Servlet 2.1的环境,有些需要2.2。 有些只在JDK 1.2或更高版本下运行,有些则在JDK 1.1下(不高于)。 有些需要在Swing 1.0之前的“com.sun.swing”包,有些需要“javax.swing”包名。

更糟糕的是,即使在公司企业内部也能find这个问题,因为从六个月前开始使用Java开发的系统由于安装了一个新的(看似不相关的)应用程序版本所需的一些Java扩展,可能突然“不起作用”。 这可能会使整个公司的Java应用程序的部署变得复杂,并引导客户准确地想知道为什么在臭名昭着的“安装 – 这个应用程序打破我的系统”困境开始5年之后,我们仍然避难除此之外,还有很多进展。 (实际上,新的.NET计划实际上是为了解决刚刚描述的臭名昭着的“DLL-Hell”问题。)

本文将介绍如何configurationJava安装,以便给定应用程序接收其自己的私有JRE,从而允许多个Java环境共存,而不会使客户(或系统pipe理员)疯狂。

或使用链接。 虽然在运行环境中更新PATH是相当不愉快的,但是很容易重新创build到新版本JRE / JDK的链接。 所以:

  • 安装您想要使用的不同版本的JDK
  • 通过连接点或内置的mklink命令创build到该文件夹​​的链接
  • 将PATH设置为链接
  • 如果要使用其他版本的java,删除链接,创build一个新的,PATH / JAVA_HOME /硬编码脚本保持不变

应该可以改变设置JAVA_HOME环境variables对于特定的应用程序不同。

从命令行或批处理脚本启动时,可以使用set JAVA_HOME=C:\...\j2dskXXX来更改JAVA_HOME环境。

您可能还需要更改PATH环境variables以使用正确的java二进制文件。 为此,您可以使用set PATH=%JAVA_HOME%\bin;%PATH%

用“java -version:1.5”调用Java应该使用正确版本的Java来运行。 (显然用你想要的版本replace1.5)

如果在Windows上正确安装了Java,则存在registry中存储的每个版本的vmpath,因此您不需要在Windows上混淆环境版本。

如果您使用Java Web Start (您可以从任何URL(甚至是本地文件系统)启动应用程序),它将负责为您的应用程序find正确的版本。