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

Dan*_*nca 75 java

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

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

rea*_*ane 58

当然,您可以在Windows下使用多个版本的Java.不同的应用程序可以使用不同的Java版本.你的申请是如何开始的?通常你会有一个批处理文件,其中有类似的东西

java ...
Run Code Online (Sandbox Code Playgroud)

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

%JAVA6HOME%\bin\java ...
Run Code Online (Sandbox Code Playgroud)

  • 在Windows上,要停止Java安装程序替换现有(首次安装的)Java安装,必须将STETE = 1参数传递给它,即从命令行"jre-6u24-windows-i586-s.exe/STATIC = 1"运行 (8认同)
  • 根据[来自Oracle的这份文件](http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jre-installer-options.html),它实际上是`jdk -... exe STATIC = 1`.我试过这个并且它有效. (6认同)
  • 当我在Windows 7 64上执行"jdk-6u27-windows-x64.exe/STATIC = 1"时,它不会安装,只会弹出一个弹出窗口,显示msiexec的用法. (3认同)
  • 伙计们,你们混淆了 JDK 和 JRE。JRE 确实采用“STATIC”作为参数,但 JDK 也是如此吗? (2认同)

Mos*_*she 11

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

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

  • 我不相信这适用于Windows. (2认同)

小智 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下运行(并且不高于JDK 1.1).有些需要来自Swing前1.0天的"com.sun.swing"软件包,其他需要"javax.swing"软件包名称.

更糟糕的是,甚至在公司企业内也可以发现这个问题,因为由于安装了一个新的(看似无关的)应用程序版本所需的Java扩展,六个月前使用Java开发的系统可能突然"无法工作".这可能会使整个公司的Java应用程序部署变得复杂,并引导客户想知道为什么,在臭名昭着的"安装 - 这个应用程序 - 破坏我的系统"开始五年后,微软的DLL计划开始出现问题,我们仍然存在进步远不止于此.(事实上​​,新的.NET计划实际上试图解决刚刚描述的臭名昭着的"DLL-Hell"问题.)

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

  • +1"对[Java]的笨拙感到震惊". (7认同)
  • 我认为上面回答中给出的链接不再存在了.我在这里找到了同样的文章http://docplayer.net/15645854-Multiple-java-homes-giving-java-apps-their-own-jre-a- javageeks-COM-白paper.html (5认同)

小智 6

我在用我自己的java版本启动JMeter时使用了一个简单的脚本

setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
Run Code Online (Sandbox Code Playgroud)

要拥有一个“便携式”java,您可以在此处使用此方法:

https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights


Nar*_*shi 5

我们可以使用 SDKMan 在同一台机器上安装多个版本的 Java 开发工具包。

SDKMan 的一些要点如下:

  1. SDKMan 是免费使用的,由开源社区开发。
  2. SDKMan 是用bash编写的,它只需要在您的系统上存在curlzip/unzip程序。
  3. SDKMan 可以为 JVM 安装大约 29 个软件开发工具包,例如 Java、Groovy、Scala、Kotlin 和 Ceylon。Ant、Gradle、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" 
Run Code Online (Sandbox Code Playgroud)

因为 SDKMan 是用bash编写的,并且只需要curlzip/unzip出现在您的系统上。您也可以通过首先为 Windows环境安装CygwinGit Bash,然后运行上面的命令,在 Windows上安装 SDKMan 。

命令sdk list java将为我们提供一个 Java 版本列表,我们可以使用 SDKMan 安装这些版本。

安装 Java 8

$ sdk install java 8.0.201-oracle
Run Code Online (Sandbox Code Playgroud)

安装 Java 9

$ sdk install java 9.0.4-open 
Run Code Online (Sandbox Code Playgroud)

安装 Java 11

$ sdk install java 11.0.2-open
Run Code Online (Sandbox Code Playgroud)

卸载 Java 版本

如果您想卸载任何 JDK 版本,例如 11.0.2-open,您可以按如下方式进行:

$ sdk uninstall java 11.0.2-open
Run Code Online (Sandbox Code Playgroud)

切换当前 Java 版本

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

sdk default java <your-java_version>
Run Code Online (Sandbox Code Playgroud)

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

  • 它适用于非 Windows 用户。 (2认同)