web-dev-qa-db-fra.com

Configuration de la machine virtuelle via la ligne de commande sous Windows

Est-il possible de spécifier la machine virtuelle à utiliser lorsque vous appelez "jar Java nom_jar.jar". J'ai deux JVM installées sur ma machine. Je ne peux pas changer Java_HOME car cela pourrait casser du code prêt à être utilisé.

Sincères amitiés

Stephen

24
John

Oui - fournissez simplement explicitement le chemin d'accès à Java.exe. Par exemple:

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)

La manière la plus simple de faire cela pour une commande en cours d'exécution est quelque chose comme:

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

Par exemple, voici une session complète montrant ma machine virtuelle Java par défaut, puis la modification du chemin, puis la nouvelle:

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)

Cela ne changera pas les programmes qui utilisent explicitement Java_HOME.

Notez que si vous obtenez le mauvais répertoire dans le chemin - y compris un répertoire inexistant - vous ne recevrez aucune erreur, il sera simplement ignoré.

45
Jon Skeet

Vous devriez pouvoir le faire via les arguments de ligne de commande, en supposant qu'il s'agisse de machines virtuelles Sun installées à l'aide des mécanismes Windows InstallShield habituels avec le JVM Finder EXE dans system32 .

Tapez Java -help pour les options. En particulier, voir:

-version:<value>
              require the specified version to run
-jre-restrict-search | -jre-no-restrict-search
              include/exclude user private JREs in the version search
2
McDowell

Si vous avez 2 installations de la machine virtuelle Java. Placez la version à l’avance. Linux: export PATH =/usr/lib/jvm/Java-8-Oracle/bin: $ PATH

Cela élimine l'ambiguïté.

0
Loshen Naicker

oui, j’ai souvent besoin de 3 ou plus de machines virtuelles Java installées. Par exemple, j'ai remarqué que parfois le JRE est légèrement différent de la version JDK du JRE.

Mon solution Windows pour un peu de «packaging» ressemble à ceci:

@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

Je pense que c'est simple. L'essentiel est que les paramètres setlocal et endlocal offrent à votre application un "environnement personnel", quelle que soit son activité, même s'il existe d'autres programmes à exécuter.

0
will