2010-06-09 34 views
5

¿Hay alguna manera de reconstruir los argumentos de línea de comando pasados ​​a Java dentro de un programa Java, incluidas las opciones de JVM y la opción de ruta de acceso de clase?Reconstrucción de los argumentos de línea de comandos de java

Tengo un programa Java que necesita reiniciar la JVM y manipular su bootclasspath (es decir, intentar anular algunas clases del sistema). Utilizo el método libcsystem para invocar la nueva JVM.

Estoy abierto para mejores enfoques, pero los agentes de Java no son una opción.

+0

Tengo mucha curiosidad por lo que intenta hacer aquí ... – alex

+0

¿Está disponible 'ps -xxx'? – trashgod

+0

@trashgod, no, no está disponible para su reutilización – notnoop

Respuesta

1

¿Por qué no utilizar un archivo que tenga estas propiedades como el archivo Eclipse ini y los archivos NetBeans conf? De esta forma, solo lee estas propiedades y genera el nuevo proceso de Java con estas propiedades.

Volver a su pregunta, esto anterior answer debe hacer

+0

Gracias! 'RuntimeMZBean.getInputArguments()' resuelve el problema bastante bien. – notnoop

-1

Err ... modificar una clase java de núcleo completo en runtime es una muy mala idea.

¿Qué hay de malo con la subclasificación aquí? ¿Estás tratando de modificar una biblioteca externa, agregar funcionalidad o ser perezoso?

+0

¿Por qué el voto a favor? – TheLQ

+0

Bienvenido a Internet, amigo. –

0

Estoy de acuerdo que pelearse con bootclasspath es generalmente una mala idea. Pero ...

Obtenga el código para "java.c" - el programa C que se compila en java.exe. Descubrirá que solo usa la API de Invocación de JNI para construir una JVM y llamar al método principal. Puede modificar y volver a compilar esto para buscar códigos de salida particulares, etc. y recorrer y volver a iniciar la JVM si es necesario.

Alternativamente, Eclipse hace esto (o al menos solía hacerlo), pero al tener un programa Java construye la línea de comando (desde un archivo de utilería, etc.) y lanza un subproceso. De nuevo, enganchó el código de salida del subproceso y lo usó para decidir si volver a lanzar un nuevo subproceso o no.

Cuestiones relacionadas