JARs stand-alone mediante Maven

Un requerimiento usual de un proyecto desarrollado en Java es que pueda ejecutarse en cualquier máquina (lo que algunos llamaríamos portabilidad). El problema consiste en la administración de dependencias de la aplicación: si falta alguna en el classpath, el JAR ejecutable falla con un ClassNotFoundException. Una solución común es crear un JAR que contenga todas las dependencias que necesita. Esta propuesta tiene varios nombres, como über-jar y stand-alone jar.

¿Cómo lograr crear un JAR stand-alone? En un post anterior, mencioné lo útil que puede ser el plugin FatJAR para Eclipse. Sin embargo, hay un plugin para Maven que logra el mismo efecto: el maven-assembly-plugin. En el POM, sólo basta con agregar estas líneas al pom.xml del proyecto, en la sección buildsplugins. Asegúrese de cambiar el nombre de la clase principal

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath> 
        <mainClass>com.example.paquetes.ClasePrincipal</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>

Cuando se ejecute el target package, se generará en la carpeta target un JAR adicional que tiene el sufijo jar-with-dependencies. Ese es el JAR stand-alone que se busca.

Anuncios

FatJAR y otros plugins según Eclipse Indigo

La instalación manual de plugins en Eclipse Indigo probó ser un problema. Específicamente, la instalación de FatJAR fue un dolor de cabeza, a pesar de lo simple que se dice que es ponerlo a funcionar.

En buena teoría, el plugin FatJAR realiza un build de un proyecto, en el cual se incluyen directamente los proyectos y librerías externas necesarias para su funcionamiento. Esto resulta en un archivo JAR más grande, pero evita la necesidad de configurar la máquina cliente con parámetros extraños para reconocer la ubicación de las dependencias del ejecutable. Para descargarlo, visite la página en Sourceforge del proyecto.

En Eclipse Indigo (más precisamente, 3.7 o superior), la carpeta de plugins no es precisamente plugins, sino dropins. En una instalación mediante apt en Ubuntu 12.04, la ruta completa sería /usr/share/eclipse/dropins.

Para instalar manualmente un plugin es necesario:

  1. Crear en la carpeta de dropins una nueva carpeta que identifique al plugin. Dado que pretendemos instalar FatJAR, hay que crear la carpeta “fatjar“. La ruta completa es /usr/share/eclipse/dropins/fatjar.
  2. Dentro de la carpeta recién creada, crear una nueva carpeta “plugins“. La ruta completa hasta ahora es /usr/share/eclipse/dropins/fatjar/plugins
  3. En esa última carpeta, agregar el JAR del plugin.

Puede hacer esto con otros plugins. Para poder utilizarlos, como paso final está reiniciar Eclipse. No es realmente necesario ejecutar Eclipse con la opción -clean.

Paquetes de LaTeX de uso diario

Acabamos de entregar un proyecto grande, cuya documentación fue gestionada completamente en XeLaTeX. Después de refinarlo mucho, he desarrollado una clase para XeLaTeX que incluye varios paquetes muy útiles a través de casi todos los documentos que redacto, más uno que otro comando personalizado.

Los paquetes que siempre encuentro útiles son los siguientes.

  • geometry
    Permite cambiar los márgenes de las páginas de una manera pareja y sencilla.
  • emptypage
    Sirve para dejar sin numeración ni encabezados aquellas páginas que no tengan contenido, para que realmente estén en blanco.
  • tabularx
    Permite crear tablas que se acomoden a un ancho específico.
  • booktabs
    Provee tres tipos de bordes horizontales para que las tablas se vean elegantes. Ayuda mucho cuando uno deja de usar bordes verticales.
  • multicol y multirow
    Sirven para unir columnas y filas en tablas.
  • fancyhdr
    Para personalizar los encabezados. Me es útil para mantener la numeración de las páginas en el encabezado y no en el pie de página.
  • fncychap
    Cambia la apariencia de los encabezados de capítulo. Personalmente, me gusta el estilo Bjornstroup para documentos ingenieriles extensos, como las Especificaciones de Requerimientos de Sistema.
  • graphicx
    Necesario para tener control sobre las imagenes incrustadas en los documentos.
  • xcolor
    Permite tener un mejor control de la combinación y aplicación de colores a texto y otros elementos gráficos.
  • TikZ
    Gráficos vectoriales. Permite realizar muchas ilustraciones interesantes. Existen muchos ejemplos en TeXample.net.
  • hyperref
    ¡Hipervínculos! Muy útiles para navegar más fácilmente por el documento y para incluir vínculos hacia páginas web.
  • hypcap
    Permite corregir el comportamiento de los vínculos hacia tablas y figuras, para que se muestre la parte superior de la figura en vez de solo su leyenda.
  • amsmath, amssymb, amsthm
    Los paquetes usuales para incluir notaciones matemáticas en los documentos.

Esporádicamente utilizo otros, pero estos son los que utilizo con una frecuencia particularmente alta. Siempre considero que si uno necesita realizar alguna proeza tipográfica en LaTeX, a alguien más ya se le ocurrió y existe un paquete que ayuda a lograr lo que se quiere en el documento. Solo es cuestión de saber buscar.

¡Que tenga buen día!