sistema programa librerias hacer ejecutar ejecutable directo crear con compilar como archivo acceso java eclipse deployment

java - programa - crear archivo jar en netbeans



¿Cuál es la mejor manera de empaquetar una aplicación Java con muchas dependencias? (7)

Estoy escribiendo una aplicación java usando eclipse que hace referencia a algunos archivos jar externos y requiere que algunos archivos de configuración sean accesibles por el usuario.

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

  2. Tengo entendido que 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. ¿Existe 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.

Aclamaciones.


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

Una breve introducción a maven se puede encontrar aquí .

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á usando eclipse, entonces descargue la integración de maven también.

(2) Otra alternativa es usar OneJar (descargo de responsabilidad: no lo he intentado yo mismo).


Hormiga. No es lo mejor del mundo, pero es estándar, es apache y funciona. Hay algunos buenos ejemplos en la web de cómo hacer un simple build.xml para cualquier, y tiene algunas características como la tarea de ''guerra'' que sabe cómo poner todo el material básico (clases, web.xml, etc.) en el archivo jar para ti. También puede indicarle que recoja otros archivos de configuración y jarras 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.


Las respuestas varían dependiendo del tipo de cosa que estés 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 archivo jar a un repositorio Maven con información pom para rastrear dependencias también es una excelente opción para las bibliotecas. ¡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 revisen sus opciones.


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


Deberías probar 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 archivos ejecutables, para implementar nuestros paquetes de software a nuestros clientes, y funciona como un encanto.


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 correcto. 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 los 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.


Bueno, si hablas de la implementación de una aplicación de escritorio independiente:

Antes de cambiar al inicio web , hemos creado tres archivos de despliegue, uno para Windows, uno para Mac y uno para otras plataformas.

En Windows hemos utilizado con éxito el sistema de instalación de secuencias de comandos de Nullsoft (conocido por su uso en las versiones anteriores de winamp) y su tarea ant , aunque algunos inconvenientes son:

  • Solo se puede usar en Windows AFAIR
  • Tienes que hacer un trabajo a mano, es decir, personalizar el guión 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 una tarea ant para crear un archivo .app a partir 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, debe esperar que se encuentren en un entorno un * x y despliegue su aplicación con un script de shell para iniciar la aplicación.

En cualquier caso, es posible que deba implementar su archivo de política personalizado para obtener derechos de acceso para su aplicación.

Si desea deshacerse de todo el embalaje y las cosas, debería considerar seriamente utilizar el inicio web . Hemos ahorrado mucho tiempo desde que pasamos a él, es decir, simplificamos nuestro proceso de implementación, nos ocupamos de las actualizaciones, etc.

Actualización 2014

Utilice el complemento de ensamblaje de maven , consulte la sección "Creación de un archivo ejecutable"