Crear un solo jar
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.