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?

¿Fue útil?

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 subdirectorio bin. Incluso con Sun Java, en Windows hay dos ejecutables; java y javaw.

  • 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 y j9w 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 opciones java 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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top