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
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é.
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
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é.
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.