2009-05-19 11 views
11

mi aplicación necesita varios tarros para funcionar. Como es una aplicación de escritorio, no puedo responsabilizar al usuario de la instalación. Por lo tanto, en mi script de compilación, descomprimo el contenido de jars en mi directorio de compilación, borro los archivos de manifiesto, compilo mi software y lo vuelvo a ejecutar. Todo funciona como debería, mi pregunta es si hay algún efecto secundario a largo plazo para este proceso.Fusión de varios tarros en un solo tarro

Respuesta

12

En el pasado, había JAR con contenido extraño (como el controlador de DB2 que contiene com.ibm y com.IBM; después de descomprimir en un sistema de archivos de Windows, esos dos paquetes se fusionarían).

El único problema que debe tener en cuenta son los archivos jar firmados y otros archivos en META-INF que pueden tener el mismo nombre en varios JAR de origen.

Una solución simple para todos estos problemas es usar One-JAR. Permite envolver varios JAR en uno sin desempaquetarlos, primero. Y leer esta respuesta: Easiest way to merge a release into one JAR file

1

Si algunos de los frascos están firmados, se pierde la firma al desembalarlo/reempaquetarlo.

0

Bueno, está tirando el MANIFIESTO de sus jarras de terceros, por lo que podría causarle problemas. Por ejemplo, podría estar causando problemas de seguridad tirando el atributo "Sellado".

¿Por qué no crear simplemente un instalador simple y una secuencia de comandos para iniciar su aplicación que establece la CLASSPATH correctamente?

1

Si desea una forma sin problemas para el usuario final para dar inicio a un programa con múltiples dependencias tarro es posible que desee mirar a Launch4j o Jsmooth (prefiero Launch4j). Ambos son programas que crean ejecutables que envuelven jar (s) y JRE juntos de modo que para el usuario final no aparece diferente de cualquier otro ejecutable.

2

Otra gran opción es ProGuard, que también puede encoger y/u ofuscar el código.

1

Si la plataforma de destino principal es el escritorio de Windows, entonces también podría considerar la generación de un exe nativo de Windows de los frascos de su aplicación

0

Uno-JAR hará el trabajo, y tiene una nueva versión (0.97), que admite marcos como Spring y Guice, que los usuarios ahora están empaquetando en archivos One-JAR. http://one-jar.sourceforge.net

Ference Hechler también hizo un gran trabajo dentro de Eclipse con el asistente de exportación de Eclipse: trabajamos juntos en FatJar/One-JAR de la que creció el trabajo de Eclipse, y puedo recomendar que como un enfoque, aunque no lo hago saber qué tan bien maneja los marcos.

4

Una solución más simple (IMO) está utilizando Maven's assembly plugin, que también se describe en una de las respuestas a otra pregunta a la que se ha vinculado en un previous Q&A. Esto se proporciona si está utilizando Maven (que es una herramienta recomendada por derecho propio) como una herramienta de compilación.

Cuestiones relacionadas