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


83

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

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

Answers:


60

当然,您可以在Windows下使用Java的多个版本。并且不同的应用程序可以使用不同的Java版本。您的申请如何开始?通常,您将拥有一个批处理文件,其中包含类似

java ...

这将使用PATH变量搜索Java可执行文件。因此,如果Java 5首先出现在PATH上,则在运行Java 6应用程序时会遇到问题。然后,您应该修改批处理文件以使用特定的Java版本,例如,通过JAVA6HOME使用值定义环境变量C:\java\java6(如果此目录中安装了Java 6)并更改批处理文件的调用

%JAVA6HOME%\bin\java ...

9
在Windows上,要停止Java安装程序替换现有(首次安装)的Java安装,必须将STATIC = 1参数传递给它,即从命令行“ jre-6u24-windows-i586-s.exe / STATIC = 1”运行
汤姆·奇弗顿(Tom Chiverton)2011年

4
当我在Windows 7 64上执行“ jdk-6u27-windows-x64.exe / STATIC = 1”时,它没有安装,它只是弹出一个弹出窗口,显示msiexec的用法。
yetimoner 2011年

7
根据Oracle这份文件,它实际上是jdk-...exe STATIC=1。我尝试了一下,它奏效了。
马特

1
伙计们,您对JDK和JRE感到困惑。JRE确实STATIC作为参数,但是JDK也是吗?
Danijel 2013年

1
@reallyinsane我不明白这一点。对于新手来说,答案并没有得到简化。您可以将我链接到完整的教程吗?
CodingOnSteroid

12

绝对可以并排安装几个JRE / JDK版本。而且,您不必为此做任何特殊的事情,因为Sun会为每个文件夹创建一个不同的文件夹(在Program Files下)。

没有控制面板来检查哪个JRE适用于每个应用程序。基本上,将起作用的JRE将是PATH环境变量中的第一个。您可以更改它或JAVA_HOME变量,或创建特定的cmd / bat文件来启动所需的应用程序,每个应用程序在路径中均具有不同的JRE。


2
我认为Windows并非如此。
cmcginty 2013年

@Casey,您指的是哪一部分?为什么不是真的?
Pacerier 2014年

1
此答案说明了问题。Windows注册表用于查找Java的默认版本。
binarysubstrate

尽管通常确实可以在新版本的Java程序上正常运行Java程序,然后再对其进行开发,但这并不能保证。同样,在大多数情况下,需要更新JAVA_HOME环境变量。
帕特里克·奥哈拉

11

我对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”软件包名称。

更糟糕的是,甚至在公司内部也可能发现此问题,因为仅仅六个月前使用Java开发的系统由于安装了新的(似乎无关)应用程序所需的某些Java扩展而可能突然“无法工作”。这可能会使整个公司内Java应用程序的部署复杂化,并导致客户确切地想知道,为什么在臭名昭著的“安装此应用程序破坏我的系统”问题开始五年后,微软的DLL方案就开始了,除此之外,没有什么进步。(实际上,新的.NET计划实际上是在解决刚刚描述的臭名昭著的“ DLL-Hell”问题。)

本文描述了如何配置Java安装,以便给定的应用程序接收其自己的私有JRE,从而允许多个Java环境共存而不会使客户(或系统管理员)发疯。


8
我认为以上答案中给出的链接不再存在。我在docplayer.net/…上
Alok Mishra

3

我们可以使用SDKMan在同一台计算机上安装多个版本的Java开发套件。

关于SDKMan的一些要点如下:

  1. SDKMan是免费使用的,由开源社区开发。
  2. SDKMan是用bash编写的,它只需要curlzip / unzip程序就可以出现在您的系统上。
  3. SDKMan可以为JVM安装大约29个软件开发套件,例如Java,Groovy,Scala,Kotlin和Ceylon。蚂蚁,摇篮,Grails,Maven,SBT,Spark,Spring Boot,Vert.x
  4. 我们不需要担心设置_HOMEPATH环境变量,因为SDKMan会自动处理它。

SDKMan可以在任何基于UNIX的平台上运行,例如Mac OSX,Linux,Cygwin,Solaris和FreeBSD,我们可以使用以下命令进行安装:

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

因为SDKMan是用bash编写的,所以只需要curlzip / unzip即可出现在系统上。您也可以先在Windows环境中安装CygwinGit Bash,然后再运行上述命令,然后在Windows上安装SDKMan 。

Commandsdk list java将为我们提供可以使用SDKMan安装的Java版本列表。

安装Java 8

$ sdk install java 8.0.201-oracle

安装Java 9

$ sdk install java 9.0.4-open 

安装Java 11

$ sdk install java 11.0.2-open

卸载Java版本

如果要卸载任何JDK版本,例如11.0.2-open,则可以执行以下操作:

$ sdk uninstall java 11.0.2-open

切换当前的Java版本

如果要为所有终端和应用程序激活一种版本的JDK,则可以使用以下命令

sdk default java <your-java_version>

上面的命令还将自动更新PATH和JAVA_HOME变量。您可以在我的文章如何在同一台机器上安装Java的多个版本上阅读更多内容。


适用于非Windows用户。
gumuruh

@gumuruh您也可以在Windows上安装它,因为SDKMan是用bash编写的,只需要curl和zip / unzip即可出现在系统上。您也可以在Windows上安装SDKMan,方法是先在Windows环境中安装Cygwin或Git Bash,然后运行上述命令。
Naresh Joshi

2

对于特定的应用程序,应该可以改变设置JAVA_HOME环境变量的方式。

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

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


2

使用“ java -version:1.5”等调用Java应该以正确的Java版本运行。(显然,将1.5替换为您想要的版本。)

如果在Windows上正确安装了Java,则使用的注册表中存储的每个版本都有vm的路径,因此您无需担心Windows上的环境版本。


我相信这仅适用于“公共” JRE。在客户端计算机上非常出色,这对于不安装公共JRE的开发人员来说有点麻烦。比批处理文件好得多。
James Schek

2

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

  • 安装要使用的不同版本的JDK
  • 通过联结或内置mklink命令创建到该文件夹​​的链接
  • 将PATH设置为链接
  • 如果要使用其他版本的Java,请删除该链接,然后创建一个新的链接,PATH / JAVA_HOME / hardcoded脚本保持不变



0

使用Java Web Start,您可以安装多个JRE,然后调用所需的内容。获胜时,您可以创建一个.bat文件:

1-在线版本:< your_JRE_version \ bin \ javaws.exe> -localfile -J-Djnlp.application.href = < 。jnlp文件的URL .jnlp> -localfile -J“ < path_temp_jnlp_file_ .jnlp>”

2-从缓存启动:< your_JRE_version \ bin \ javaws.exe> -localfile -J“ <您的本地_jnlp_file的路径。jnlp>”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.