Java 在Windows上通过命令行设置JVM

Java 在Windows上通过命令行设置JVM,java,windows,command-line,jvm,Java,Windows,Command Line,Jvm,当您调用“javajar\u name.jar”时,是否可以指定要使用的JVM。我的机器上安装了两个JVM。我不能改变JAVA_主页,因为它可能会破坏已经准备好运行的代码 问候 Stephen是-只需显式提供java.exe的路径。例如: c:\Users\Jon\Test>"c:\Program Files\java\jdk1.6.0_03\bin\java.exe" -version java version "1.6.0_03" Java(TM) SE Runtime Environ

当您调用“javajar\u name.jar”时,是否可以指定要使用的JVM。我的机器上安装了两个JVM。我不能改变JAVA_主页,因为它可能会破坏已经准备好运行的代码

问候


Stephen

是-只需显式提供java.exe的路径。例如:

c:\Users\Jon\Test>"c:\Program Files\java\jdk1.6.0_03\bin\java.exe" -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)

c:\Users\Jon\Test>"c:\Program Files\java\jdk1.6.0_12\bin\java.exe" -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)
对于正在运行的命令shell,最简单的方法是:

set PATH=c:\Program Files\Java\jdk1.6.0_03\bin;%PATH%
例如,下面是一个完整的会话,显示我的默认JVM,然后是对路径的更改,然后是新的:

c:\Users\Jon\Test>java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

c:\Users\Jon\Test>set PATH=c:\Program Files\Java\jdk1.6.0_03\bin;%PATH%

c:\Users\Jon\Test>java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)
但这不会改变显式使用JAVA_HOME的程序


请注意,如果路径中的目录错误(包括一个不存在的目录),则不会出现任何错误,它实际上将被忽略。

您应该能够通过命令行参数执行此操作,假设这些是使用system32中JVM finder EXE的常用Windows InstallShield机制安装的Sun VM

键入java-help以获取选项。具体见:

-version:<value>
              require the specified version to run
-jre-restrict-search | -jre-no-restrict-search
              include/exclude user private JREs in the version search
-版本:
需要指定的版本才能运行
-jre限制搜索|-jre不限制搜索
在版本搜索中包括/排除用户专用JRE

是的,我经常需要安装3个或更多JVM。例如,我注意到有时候JRE与JDK版本的JRE略有不同

我的Windows“打包”解决方案是这样的:

@echo off
setlocal
@rem  _________________________
@rem
@set  JAVA_HOME=b:\lang\java\jdk\v1.6\u45\x64\jre
@rem
@set  JAVA_EXE=%JAVA_HOME%\bin\java
@set  VER=test
@set  WRK=%~d0%~p0%VER%
@rem
@pushd %WRK%
cd 
@echo.
@echo  %JAVA_EXE%  -jar %WRK%\openmrs-standalone.jar
       %JAVA_EXE%  -jar %WRK%\openmrs-standalone.jar 
@rem
@rem  _________________________
popd
endlocal
@exit /b

我认为这很简单。最主要的是setlocal和endlocal为你的应用程序提供了一个“个人环境”,即使还有其他程序要运行。

如果你安装了两个JVM。 将版本放在前面。 Linux:export PATH=/usr/lib/jvm/java-8-oracle/bin:$PATH


这消除了歧义。

哇,这是一个明确的骨架。我正要发布您答案的前两行,突然弹出通知。@Jon Skeet我如何在Java程序中做到这一点?我想用32位JRE运行一个.jar,我能用Java代码为新进程设置JRE路径吗?@Utku:当你创建一个进程时,你可以将完整路径传递给可执行文件…@Jon Skeet你能用一个例子告诉我怎么做吗?@Utku:不是在一个无关问题的评论线程上下文中,不,我建议您做一些研究(例如,在堆栈溢出中搜索),如果绝对必要,可以问一个新问题。