Crear un solo jar

De ChuWiki

Hay un plugin de FreeHEP que permite meter todos los jar de los que dependemos y las clases propias de nuestro proyecto en un solo jar.

Es decir, si usamos por ejemplo Categoría:Log4j, poniendo este plugin se generará un solo jar para nuestro proyecto que tendrá dentro todas las clases de nuestro proyecto más las clases del Categoría:Log4j. Así no necesitamos distribuir varios jars.

Este plugin se llama jarjar y la forma de configurarlo para que funcione solo es la siguiente:

En primer lugar, debemos indicar en nuestro pom.xml de dónde se descarga dicho plugin. Para ello ponemos

<project>
...
   <pluginRepositories>
      <pluginRepository>
         <id>freehep-maven</id>
         <name>Maven FreeHEP</name>
         <url>http://java.freehep.org/maven2</url>
      </pluginRepository>
   </pluginRepositories>
...
</project>

y luego debemos decir qué queremos que se ejecute de este plugin, por lo que debemos poner esto

<project>
...
   <build>
      <plugins>
         <plugin>
            <groupId>org.freehep</groupId>
            <artifactId>freehep-jarjar-plugin</artifactId>
            <executions>
               <execution>
                  <goals>
                     <goal>jarjar</goal>
                  </goals>
               </execution>
            </executions>
           <!-- El siguiente trozo debemos ponerlo si queremos que se metan
               dentro del jar TODOS los jar de los que dependemos de forma no
               explicita en el pom.xml -->
	   <configuration>
		   <addTransitiveDependencies>true</addTransitiveDependencies>
	   </configuration>
         </plugin>
         ...
      </plugins>
   </build>
...
</project>

Puesto de esta forma se ejecutará incluso antes de compilar nuestros fuentes, de forma que en el directorio target, creará un subdirectorio classes y ahí desempaquetará todos los class de los jar de los que dependemos (en nuestro ejemplo, los class que hay dentro de Categoría:Log4j)

La parte de addTransitiveDepedencies por defecto es false, así que si dependemos de A.jar y este a su vez depdende de B.jar, B.jar no se metería por defecto en nuestro jar, salvo que pongamos ese valor a true.


Enlaces externos[editar]