2009-03-23 9 views
23

"java jar jar_name.jar"を呼び出すときに使用するJVMを指定することは可能ですか?私は自分のマシンに2つのJVMをインストールしています。 JAVA_HOMEを変更することはできません。すべての実行準備ができているコードが壊れる可能性があります。WindowsのコマンドラインからJVMを設定する

種類よろしく

スティーブン

答えて

44

はい - ちょうど明示の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) 

実行するコマンドシェルのためにこれを行う最も簡単な方法は、のようなものされています。たとえば、ここに私のデフォルトのJVMを示す完全なセッションはパスへの変更、その後、だ

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

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を使用するプログラムは変更されません。

パスに間違ったディレクトリがある場合(存在しないディレクトリも含む)、エラーは発生しません。実際には無視されます。

+1

うわー、これは決定的なスケーティングです。私は、通知がポップアップしたときにあなたの答えの最初の2行をおおよそ投稿しようとしていました。 –

+0

@Jon SkeetどのようにJavaプログラムでこれを行うことができますか?私は32ビットJREを使用して.jarを実行したいが、Javaコードから新しいプロセスのJREパスを設定することはできますか? –

+0

@Utku:プロセスを作成すると、完全なパスを実行可能ファイルに渡すことができます。 –

2

これは、通常のWindows InstallShieldメカニズムを使用してインストールされたSun VMが、JVMファインダEXEでsystem32にインストールされていることを前提としています。

タイプ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 
+0

+1、java 1.6が必要です – RealHowTo

0

はい私はしばしば3つ以上のJVMがインストールされている必要があります。たとえば、JREがJDKのJREと若干異なる場合があることに気付きました。私はそれは簡単だと思う

@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 

:「包装情報」のビットのためのWindows上の溶液に行くマイ

はこのようなものです。主なものは、setlocalとendlocalで、実行するプログラムが他にもあっても、あなたのアプリにこれまでの「個人的な環境」を与えることです。あなたはJVMの2をインストールしている場合は

0

は、Linux

sudo update-alternatives --config java 
1

でこれを試してみてください。 バージョンを先に配置します。 Linux:export PATH =/usr/lib/jvm/java-8-oracle/bin:$ PATH

これにより、あいまいさが解消されます。

関連する問題