【问题标题】:Setting the JVM via the command line on Windows在 Windows 上通过命令行设置 JVM
【发布时间】:2010-10-15 01:33:33
【问题描述】:

是否可以指定调用“java jar jar_name.jar”时使用的JVM。我的机器上安装了两个 JVM。我无法更改 JAVA_HOME,因为它可能会破坏已准备好运行的代码。

亲切的问候

斯蒂芬

【问题讨论】:

    标签: java windows command-line jvm


    【解决方案1】:

    是的 - 只需明确提供 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 的程序。

    请注意,如果您在路径中找到错误的目录 - 包括一个不存在的目录 - 您不会收到任何错误,它实际上会被忽略。

    【讨论】:

    • 哇,这是一个权威的 skeeting。当通知弹出时,我正要发布您答案的前两行。
    • @Jon Skeet 如何在 Java 程序中做到这一点?我想使用 32 位 JRE 运行 .jar,我可以通过 Java 代码为新进程设置 JRE 路径吗?
    • @Utku:那么当你创建一个进程时,你可以将完整路径传递给可执行文件......
    • @Jon Skeet 你能用一个例子告诉我怎么做吗?
    • @Utku:不在无关问题的评论线程的上下文中,不。我建议你做一些研究(例如在 Stack Overflow 中搜索)并在绝对必要时提出一个新问题。
    【解决方案2】:

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

    键入 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
    

    【讨论】:

      【解决方案3】:

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

      我在 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 为您的应用程序提供了一个“个人环境”——即使还有其他程序要运行。

      【讨论】:

        【解决方案4】:

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

        这消除了歧义。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-09
          • 2017-04-23
          • 2021-05-25
          • 2016-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多