2008-11-19 16 views
12

Estoy escribiendo una aplicación java utilizando eclipse que hace referencia a algunos archivos jar externos y requiere que algunos archivos de configuración sean accesibles por el usuario.¿Cuál es la mejor manera de empaquetar una aplicación Java con muchas dependencias?

  1. ¿Cuál es la mejor manera de empaquetarlo para el despliegue?

  2. Según tengo entendido, no puede poner los tarros dentro de otro archivo jar, ¿es correcto?

  3. ¿Puedo mantener mis archivos de configuración fuera de los contenedores y todavía hacer referencia a ellos en el código? ¿O debería la ruta al archivo de configuración ser un argumento de línea de comando?

  4. ¿Hay complementos de terceros para eclipse que ayuden a hacer esto más fácil? Estoy usando un archivo de compilación de ant en este momento, pero no estoy seguro de saber lo que estoy haciendo.

  5. ¿Hay un equivalente de los proyectos de implementación en Visual Studio, que resolverá todo lo que necesita y simplemente creará un instalador? He usado install4j antes, y era poderoso si no estaba tan automatizado como los proyectos de implementación de .Net.

Cheers.

Respuesta

6

No hay una "mejor manera". Depende de si está implementando una aplicación swing, webstart, applet, biblioteca o aplicación web. Cada uno es diferente

En el punto 2, estás en lo cierto. Los archivos jar no pueden contener otros archivos jar. (Bueno, técnicamente pueden, es solo que el archivo jar interno no estará en su classpath, lo que significa que los archivos jar no contienen archivos jar).

En el punto 3, ciertamente puede hacer referencia a archivos de configuración fuera del archivo jar. Por lo general, puede hacer referencia a un archivo de configuración como un archivo o un recurso. Si usa el enfoque de recursos, normalmente proviene de la ruta de clases (puede estar en un contenedor). Si usa un archivo, entonces especifica el nombre del archivo (no en un contenedor).

En general, la mayoría de los desarrolladores de Java usarían Apache Ant para lograr la implementación. Está bien documentado, así que échale un vistazo.

+0

En el Punto 5, Maven (aunque requiere cierta configuración, pero no mucho), administra sus dependencias. –

0

Ant. No es lo mejor del mundo, pero es estándar, es apache y funciona. Hay algunos buenos ejemplos en la web sobre cómo hacer un build.xml simple para cualquier, y tiene algunas características como la tarea de 'guerra' que sabe cómo poner todas las cosas básicas (clases, web.xml, etc.) en el contenedor archivo para ti También puede pedirle que recoja otros archivos de configuración y jarrones y lo hará felizmente. También es muy inteligente sobre qué compilar. Le das un directorio, y encuentra todos los archivos java y los construye solo si su archivo de clases está desactualizado, por lo que obtienes parte de la funcionalidad de creación tradicional de forma gratuita sin mucho esfuerzo.

+0

Si va a votar al menos al menos coménteme por qué este es un mal consejo? –

6

(1) Una alternativa a la hormiga que quizás desee considerar es maven.

Se puede encontrar una breve introducción a maven here.

Para construir un JAR, maven tiene el plugin jar, que puede automatizar el proceso de asegurar que todos los jar dependientes estén listados en el manifiesto de su jar.

Si está utilizando eclipse, entonces descargue el maven integration también.

(2) Otra alternativa es usar OneJar (descargo de responsabilidad: no he probado esto por mi cuenta).

+0

Dado que está ejecutando una aplicación independiente por los sonidos de ella, OneJar sería mi recomendación definitiva. Una de las ventajas es que le permitirá ejecutar la aplicación en Windows haciendo doble clic en el contenedor. –

0

Puede ver otros proyectos de Java (por ejemplo, JMeter, SquirrelSQL, JEdit, Cernunnos, etc.). Cada paquete sus aplicaciones de forma ligeramente diferente, así que considere sus objetivos cuando los revise.

3

Las respuestas varían según el tipo de cosa que esté construyendo.

Si está creando una biblioteca, es mejor distribuir su trabajo como un archivo jar. Es posible hacer referencia a sus dependencias de jar mediante el atributo Class-path en su manifiesto de jar, aunque en general creo que no es bueno. Ese atributo fue diseñado para applets y se usa con la suficiente frecuencia en libs que cuando esta técnica atrapa cosas en el classpath (cosas particularmente comunes que el usuario podría estar usando), puede obtener conflictos de versiones inesperados. Y es difícil rastrear por qué los estás viendo.

La publicación de un jar a un repositorio Maven con información pom para rastrear dependencias es una excelente opción para las bibliotecas también. ¡Si lo haces, publica tus coordenadas Maven en tus documentos!

Si está creando una aplicación, las dos opciones más populares son distribuir un archivo zip/tar/lo que sea de una estructura de despliegue O para usar un programa de instalación. Si el programa es una especie de servidor-servidor, el primero es mucho más común. Este último es más común para los clientes. En general, el programa instalador simplemente va a diseñar la estructura de despliegue y tal vez realice algunas tareas adicionales, como la instalación en ubicaciones específicas del sistema operativo.

Para construir su estructura de despliegue (también conocido como "kit"), querrá crear un proceso repetible en cualquier sistema de compilación que esté utilizando. Ant tiene abundantes ejemplos de esto y Maven tiene los complementos de ensamblaje que pueden ayudar. En general, querrá incluir un archivo jar de su código, cualquier dependencia, scripts para iniciar el programa, tal vez un JRE y cualquier otro recurso que pueda necesitar.

Si desea crear un instalador, hay muchas opciones, tanto gratuitas como comerciales. Algunas personas que conozco han tenido buenas experiencias recientemente con el IzPack gratuito, pero revisa tus opciones.

1

Bueno, si usted está hablando de despliegue de una aplicación de escritorio independiente:

Antes de que cambiamos a Web Start hemos estado creando tres archivos de implementación, uno para ventanas, una para Mac y otro para otras plataformas .

En las ventanas que se han utilizado con éxito el Nullsoft Scriptable Install System (conocido por su uso por parte de las versiones anteriores de Winamp) y su ant task, a pesar de algunos inconvenientes son:

  • que es sólo utilizable en las ventanas AFAIR
  • Tienes para hacer un trabajo a mano, es decir, personalizar el script creado por el asistente AFAIR

Por otro lado, puede crear una instalación de Windows con entradas del menú de inicio. También existe un complemento de eclipse para la edición integrada de scripts de shell de NSIS.

En Mac OS X hay un ant task para crear un archivo .app de sus archivos java para que pueda iniciarlo como una aplicación os x nativa. Pero ten cuidado de no escribir ninguna configuración en tu directorio de inicio y usar el directorio de la aplicación en su lugar.

Para otros, tiene que esperar que se encuentren en un unip y despliegue su aplicación con un script de shell para iniciar la aplicación.

En cualquier caso, es posible que deba implementar su policy file personalizado para obtener derechos de acceso para su aplicación.

Si desea deshacerse de todos los envases y cosas que debe considerar seriamente el uso de web start. Hemos ahorrado mucho tiempo desde la conexión a la misma, es decir simplificado nuestro proceso de despliegue, se encarga de las actualizaciones, etc

Actualización 2014

Uso maven assembly plugin, véase la sección "Creación de un jar ejecutable"

3

Usted debería intentar FatJar. Es un plugin de Eclipse que con solo un clic derecho en el Proyecto puede construir un archivo JAR con todo lo que necesita para ejecutar la aplicación, incluido el necesario JAR de terceros.

Lo usamos todos los días, en conjunción con JSmooth para crear los ejecutables, para implementar nuestros paquetes de software a nuestros clientes, y funciona como un encanto.

Cuestiones relacionadas