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

