Archive

Posts Tagged ‘java’

Jar ejecutable con Maven

June 23rd, 2010 Jorge Riquelme No comments

Una pregunta común que hacen usuarios nuevos de Maven es cómo crear un jar ejecutable. Generalmente las soluciones propuestas van en la línea de generar un sólo jar gigante –con todas las dependencias dentro– utilizando algo como uberjar, fatjar o el descriptor jar-with-dependencies de maven-assembly-plugin. Esto, en mi opinión, es inconveniente y poco estético, por varias razones:

  • El jar resultante es una sopa de artefactos, ya que se mezclan todas las dependencias directas y transitivas con la aplicación misma.
  • No escala; para proyectos con muchas dependencias, el proceso de formar el “super jar” es lento, por lo que no es una opción viable para utilizar en tiempo de desarrollo (sólo al hacer un release).
  • Pueden haber problemas de licencia. Algunas dependencias pueden exigir que se mantenga la integridad de los binarios que distribuyen, prohibiendo “reempaques”.

Los requerimientos que deseo satisfacer son bastante simples:

  1. Generar un jar con el manifiesto necesario; esto es, que indique la clase con el punto de entrada main y las dependencias.
  2. Poder obtener todos los jars de las dependencias, directas y transitivas, en un directorio de salida aparte (lib, por ejemplo).
  3. Generar un pequeño script bash, que lance el jar con el classpath configurado.
  4. Obtener una distribución de la aplicación, o sea, copiar todo lo anterior en un directorio del sistema (o en target).
  5. Debe ser rápido!, ya que será ejecutado recurrentemente, en tiempo de desarrollo.

En algún momento del pasado lejano llegué a una configuración que satisface los objetivos listados, consistente en una combinación de maven-jar-plugin, maven-dependency-plugin y maven-resources-plugin. Read more…

Categories: Desarrollo de Software Tags: ,