¿Cómo puedo iniciar un segundo proceso de Java?
-
09-10-2019 - |
Pregunta
¿Cómo puedo iniciar una segunda plataforma Java proceso independiente? Idealmente, debería ser la misma versión de Java que se ejecuta actualmente. ¿Hay algunas propiedades del sistema de ayuda?
Solución
No es posible, en general.
La receta proporcionada en respuesta @ de Jachik no necesariamente funcionará para una implementación no de Sun Java.
-
El ejecutable de Java no es necesariamente llama
java
y no necesariamente en vivo en el subdirectoriobin
. Incluso con Sun Java, en Windows hay dos ejecutables;java
yjavaw
. -
Las opciones de comando para el comando que inicia una JVM son diferentes para las distintas aplicaciones Java. Por lo que el paso
ProcessBuilder
puede implicar argumentos no portátiles.
Mientras que la mayoría de las JVM han adoptado las principales opciones de comando java
Sun, existen numerosas diferencias. Por ejemplo:
- IBM J9 usos
j9
yj9w
como los nombres de los ejecutables. - BEA / Oracle JRockit tiene diferentes opciones y
-X
-XX
. - Jikes RVM utiliza
rvm
como el nombre del ejecutable, y sólo es compatible con un subconjunto de opcionesjava
de Sun. - IKVM utiliza
ikvm
como el nombre del ejecutable.
(Nota:. Estos son sólo ejemplos que se destacan en una lectura superficial de la respectiva documentación en línea)
Otros consejos
Puede utilizar la propiedad del sistema java.home
para encontrar la JVM actual:
String jvm = new java.io.File(new java.io.File(System.getProperty("java.home"),
"bin"),
"java").getAbsolutePath();
y ejecute utilizando ProcessBuilder
(o Runtime.exec
).
Tenga en cuenta que para JDK puntos java.home
en el directorio JRE incluido en el JDK.
¿Ha intentado utilizar las bibliotecas Apache Commons? Si no ha dar el href="http://commons.apache.org/launcher/" proyecto lanzador intentarlo. Fue muy útil para mí hace algún tiempo.
Aquí está la descripción del proyecto desde su sitio:
El Componente lanzador está diseñado para ser un lanzador de aplicaciones cruz plataforma Java.
Las clases Java originales provienen del proyecto Tomcat 4.0.
Commons-lanzador elimina la necesidad de un lote o secuencia de comandos shell para lanzar una clase Java. Algunas situaciones en las que la eliminación de una secuencia de comandos por lotes o cáscara puede ser deseable son:
- Usted quiere evitar tener que determinar dónde ciertas rutas de aplicación son, por ejemplo, directorio de inicio de la aplicación, etc. La determinación de esta dinámica en un scripts de lotes de Windows es muy difícil en algunas versiones de Windows o cuando se utilizan enlaces simbólicos en plataformas Unix.
- Usted quiere evitar tener que manipular separadores de archivo y vía de acceso nativa o cuestiones citando vía de acceso nativa.
- Es necesario para hacer cumplir ciertas propiedades del sistema, por ejemplo, java.endorsed.dirs cuando se ejecuta con JDK 1.4.
- desea permitir a los usuarios pasar de encargo argumentos de JVM o propiedades del sistema sin tener que analizar y argumentos de reabastecimiento en su guión. Esto puede ser difícil y / o desordenado en secuencias de comandos por lotes y Shell. ¿Quieres propiedades del sistema de arranque a partir de un archivo de configuración en lugar de ellos difíciles de codificación en sus lotes y shell scripts.
- Usted desea proporcionar mensajes de error localizadas que es muy difícil de hacer en secuencias de comandos por lotes y concha.