viernes, 10 de mayo de 2013

Crear un Jar ejecutable - I

Voy a crear esta entrada que aunque es algo básico, cuando tengo que hacer un jar nuevo ejecutable siempre tengo que buscar múltiples páginas para ver las opciones que necesito.

En este primer post haremos un jar que sea ejecutable. Pero que tanto los ficheros de configuración como las librerías se incluyan en una carpeta externa al propio jar. Las carpetas serán las que nosotros les indiquemos en la configuración.

El primer paso es tener la aplicación con maven y una clase que sea ejecutable (con que con tenga el famoso public void main(String[] args) es suficiente.

En el fichero pom.xml indicamos las dependencias del proyecto, como puede ser la librería de utilidad para las trazas Log4j y la configuración básica para un proyecto java.

Para indicar que se empaquete el Jar como nosotros queremos debemos modificar el plugin maven-jar-plugin tal y como vemos:

 org.apache.maven.plugins
 maven-jar-plugin
 
  
   
    true
    es.home.fsbot.main.Rutina
    lib/
   
   
    ./conf/
   
  
 


  • La opción mainClass indicará que es un Jar ejecutable y cual es la clase a ejecutar.
  • La opción addClasspath añadirá el classpath al fichero Manifest o lo que es lo mismo, incluirá las dependencias que tengamos del proyecto en el classpath.
  • La opción classpathPrefix indicará que le añadamos el prefijo indicado a cada una de las entradas del classpath
  • La opción Class-Path del manifestEntries, hará que añadamos la carpeta indicada al classpath. Estas dos últimas opciones se verán con claridad más adelante.

El siguiente plugin nos servirá para incluir en una carpeta todas las dependencias. Esta carpeta debe de estar en el mismo directorio que el jar cuando este se vaya a ejecutar. Aunque es posible obtener las librerías manualmente, de esta forma esta todo más automatizado y facil.

 maven-dependency-plugin
 
  
   package
   
    copy-dependencies
   
   
    ${project.build.directory}/lib
   
  
 


Atentos a que se ha indicado que la carpeta se llame lib, tal y como nombramos al prefijo para las dependencias.

El siguiente paso es indicar que no queremos los ficheros de propiedades dentro del jar. Esta opción nos facilitará la ejecución del fichero en el caso de que se tenga que realizar en diferentes entornos y las propiedades sean variables.

 
  
   src/main/resources
   
    **/*.properties
   
  
 
...

Y por último le indicamos que los ficheros properties los copie a una carpeta concreta. Este paso también es por automatizar un poco el trabajo y ahí que tener en cuenta que el nombre de la carpeta de propiedades es el mismo que el indicado en el classpath anteriormente (conf)

 maven-resources-plugin
 2.6
 
  
   copy-resources
   validate
   
    copy-resources
   
   
    ${project.build.directory}/conf
    
     
      src/main/resources
      true
     
    
   
  
 


Una vez ejecutado maven con la opción clean package, en la carpeta target tendremos entre otras cosas el fichero .jar preparado para ejecutar, una carpeta conf con los ficheros de propiedades y una carpeta lib con las dependencias. Con estas tres cosas ya tenemos nuestra aplicación lista para ejecutar en cualquier entorno con una JVM.

No hay comentarios:

Publicar un comentario