2010-11-26 10 views
9

He estado agrupando JRE con mi aplicación simplemente copiando los archivos de $JAVA_HOME/jre a la distribución de mi aplicación. Esto puede ir en contra del espíritu de Java, pero reduce los posibles problemas al asegurar que mi aplicación se ejecute en una versión de JRE que fue probada (incluida la bitness; yo uso un JNI que requiere que el JRE sea una versión de 32 bits))Eliminar el JRE para incluirlo en una aplicación: ¿qué puedo omitir?

Funciona bien, pero toda la distribución es algo grande, ¿entonces tal vez podrían omitirse algunos archivos innecesarios? De hecho, $JAVA_HOME/jre/README.txt contiene los siguientes consejos:

Los archivos que conforman el entorno de ejecución de Java SE se dividen en dos categorías : obligatorios y opcionales. Los archivos opcionales pueden excluirse de las redistribuciones de Java SE Runtime Environment a discreción del proveedor .

La siguiente sección contiene una lista de los archivos y directorios que pueden omitirse opcionalmente de las redistribuciones con el entorno Java SE Runtime . Todos los archivos que no están en estas listas de archivos opcionales deben ser incluidos en las redistribuciones del entorno de tiempo de ejecución.

... Cuando la redistribución de la JRE en Microsoft Windows como un tiempo de ejecución privada aplicación (no accesible por otras aplicaciones) con un lanzador de costumbre, los siguientes archivos también son opcional. Estas son bibliotecas y ejecutables que se usan para soporte de Java en navegadores de Internet Explorer y familia Mozilla; estos archivos no son necesarios en una redistribución JRE privada.

Lo que me extraña es que la lista de archivos opcionales incluye, entre otros:

bin\java.exe 
bin\javaw.exe 
bin\javaws.exe 

¿Cómo puede ser opcional java/javaw.exe? ¿Cómo se supone que debo iniciar una aplicación Java sin ellos? Aparentemente, no sé algo (probable), o las instrucciones son simplemente erróneas.

+1

Puede que te interese http: // stackoverflow.com/questions/2258932/embed-a-jre-in-a-windows-executable – Thilo

Respuesta

2

Al redistribuir el JRE en Microsoft Windows como un tiempo de ejecución de aplicaciones privadas (no accesible por otras aplicaciones) con un iniciador personalizado, los siguientes archivos también son opcionales.

Si inserta la JVM (enlazando con sus bibliotecas compartidas) en su propia aplicación, no necesita los archivos ejecutables del iniciador independiente. Creo que Eclipse funciona de esa manera, por ejemplo.

Si su aplicación utiliza el ejecutable de Java (a través de un archivo por lotes, por ejemplo), entonces los necesita, por supuesto.

+0

Ok, ¿'java.exe' es solo un tipo de iniciador, y algunos lanzadores (quizás launch4j) contienen una funcionalidad similar? –

+0

No he usado launch4j, pero la imagen en su sitio web se parece mucho a que puede hacer eso, sí. – Thilo

0

Cómo convertirlo en un ejecutable usando una herramienta como launch4j? Algunas sugerencias más que encuentra here (no en la respuesta aceptada)

1

Si bien esto no se relaciona estrictamente con la pregunta, para la optimización de todo el programa (o toda la plataforma) de eliminar el "código innecesario", He encontrado que ProGuard es una buena herramienta. YMMV.

Cuestiones relacionadas