我们在Java 5上运行了几个应用程序,现在想要引入基于Java 6的应用程序。这两个Java版本可以在Windows下共存吗?
是否有任何控制面板可以为不同的应用程序或任何其他设置方式设置适当的Java版本,将使用哪个版本的Java来运行该特定应用程序?
答案 0 :(得分:58)
当然,您可以在Windows下使用多个版本的Java。不同的应用程序可以使用不同的Java版本。你的申请是如何开始的?通常,您将有一个批处理文件,其中有类似
的内容java ...
这将使用PATH变量搜索Java可执行文件。因此,如果Java 5首先出现在PATH上,那么运行Java 6应用程序时会遇到问题。然后,您应该修改批处理文件以使用某个Java版本,例如通过定义值为JAVA6HOME
的环境变量C:\java\java6
(如果此目录中安装了Java 6)并更改批处理文件调用
%JAVA6HOME%\bin\java ...
答案 1 :(得分:11)
绝对可以并排安装几个JRE / JDK版本。此外,您不必为此发生任何特殊事情,因为Sun正在为每个文件创建一个不同的文件夹(在Program Files下)。
没有控制面板可以检查哪个JRE适用于每个应用程序。基本上,将运行的JRE将是PATH环境变量中的第一个。您可以更改它,或者更改JAVA_HOME变量,或创建特定的cmd / bat文件以启动所需的应用程序,每个文件在路径中都有不同的JRE。
答案 2 :(得分:10)
我对Windows中的CLASSPATH,JAVA_HOME和PATH想法的笨拙感到震惊,以跟踪Java文件。我来到这里,因为有多个JRE,以及如何满足它。如果没有反复信息,来自一个比我聪明的人,我宁愿指出他关于这个问题的文章,对我而言,它完美地解决了这个问题。
文章:Ted Neward:Multiple Java Homes: Giving Java Apps Their Own 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安装,以便给定的应用程序自己接收, private,JRE,允许多个Java环境共存而不驱动客户(或系统) 管理员)疯了...
答案 3 :(得分:2)
使用“java -version:1.5”等调用Java应该使用正确版本的Java运行。 (显然用你想要的版本替换1.5。)
如果在Windows上正确安装了Java,则会为存储在注册表中的每个版本提供vm的路径,因此您无需在Windows上使用环境版本。
答案 4 :(得分:2)
或使用链接。虽然在运行环境中更新PATH是相当不愉快的,但是很容易重新创建到新版JRE / JDK的链接。所以:
答案 5 :(得分:1)
应该可以更改为特定应用程序设置不同的JAVA_HOME环境变量。
从命令行或批处理脚本开始时,您可以使用set JAVA_HOME=C:\...\j2dskXXX
来更改JAVA_HOME环境。
您可能还需要更改PATH
环境变量以使用正确的java二进制文件。为此,您可以使用set PATH=%JAVA_HOME%\bin;%PATH%
。
答案 6 :(得分:1)
如果您使用Java Web Start(您可以从任何URL启动应用程序,甚至是本地文件系统),它将负责为您的应用程序找到合适的版本。
答案 7 :(得分:1)
我们可以使用SDKMan在同一台计算机上安装多个版本的Java开发套件。
关于SDKMan的一些要点如下:
_HOME
和PATH
环境变量,因为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编写的,并且只需要curl和zip/unzip出现在您的系统上。您还可以通过先安装Cygwin或Git Bash for Windows环境,然后运行以上命令,在Windows上也安装SDKMan。
命令sdk 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变量。您可以在我的文章How to Install Multiple Versions of Java on the Same Machine上阅读更多内容。
答案 8 :(得分:0)
在使用我自己的java versin
启动jmeter时,我使用了一个简单的脚本<code>
setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
</code>
拥有一个java“便携式” 你可以在这里使用这个方法:
答案 9 :(得分:0)
使用Java Web Start,您可以安装多个JRE,然后调用所需的内容。 获胜后,您可以制作一个.bat文件:
1-在线版本: << em>您的JRE_version \ bin \ javaws.exe> -localfile -J-Djnlp.application.href = << em> .jnlp文件的网址 .jnlp> -localfile -J“ < path_temp_jnlp_file _ .jnlp>“
2-从缓存启动: << em>您的JRE版本 \ bin \ javaws.exe> -localfile -J“ << em>您的本地_jnlp文件路径 .jnlp>”