Usted puede hacer esto con perfiles ...
Si realmente quería utilizar dos perfiles distintos y personalizar el plugin JAR para incluir y excluir los patrones de nombres de clases y paquetes, fácilmente se podría hacer esto poner algo como esto en su POM:
<profiles>
<profile>
<id>everything</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>only-library</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Aparte: Si esto parece como un montón de configuración, soporte políglota de Maven para los POM maravilloso está casi listo. Reducirá considerablemente la cuenta de la línea.
Lo pondría al final de su pom.xml (dentro del elemento del proyecto), y agrega dos perfiles. El primer perfil "todo" está realmente allí para demostrar la configuración. Este perfil de "todo" es innecesario porque simplemente duplica el comportamiento de la ejecución del objetivo jar del complemento JAR predeterminado. El segundo perfil "only-library" excluye cualquier clase en cualquier paquete que comience con el texto "Main". Para invocar estos perfiles:
mvn package -Peverything
mvn package -Ponly-library
He probado esto en contra de la aplicación de ejemplo que se incluye con Chapter 6 of Maven by Example, y corriendo uno de estos comandos producirá un archivo JAR en $ {} basedir/destino que tenga un clasificador. Dado que el objetivo jar del complemento JAR está vinculado a la fase del paquete en el ciclo de vida maven predeterminado, estos dos perfiles modificarán la configuración de este complemento.
O bien, puede hacer esto con las ejecuciones de plugins dos JAR ...
Si necesita crear dos archivos JAR sin utilizar perfiles. Puede vincular el objetivo jar del complemento JAR a la fase del ciclo de vida del paquete varias veces y utilizar una configuración diferente para cada ejecución configurada. Si configura dos ejecuciones separadas, cada ejecución tiene un bloque de configuración específico de la ejecución para que pueda suministrar un identificador único y un patrón de inclusión/exclusión para cada ejecución.
Aquí está el elemento de compilación que usaría para agregar ambos JAR personalizados al "paquete" de la fase del ciclo de vida. Hacer esto en un proyecto con "jar" de embalaje daría lugar a que el objetivo jar se ejecutara tres veces. Una vez como el enlace de ciclo de vida predeterminado, y luego dos veces para dos JAR clasificados y personalizados.
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>only-library</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>only-library</classifier>
<excludes>
<exclude>**/Main*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>everything</id>
<goals><goal>jar</goal></goals>
<phase>package</phase>
<configuration>
<classifier>everything</classifier>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Si usted no está hablando acerca de la inclusión de un conjunto diferente de clases en cada artefacto, tendrá que utilizar Asambleas Maven. Si desea conocer los detalles de las asambleas, hay un capítulo enumerado al final de esta respuesta de Maven: The Complete Reference. Francamente, no creo que este capítulo en particular sea una buena referencia introductoria; de hecho, he recibido numerosos informes de que este capítulo es prácticamente ilegible (y estamos trabajando para solucionarlo). Si está buscando utilizar ensamblajes, le recomiendo el Maven Assembly Plugin's documentation. En el menú de navegación de la izquierda, verá una lista de descriptores de ensamblaje de muestra.
Descargo de responsabilidad: (Por favor) no haga esto. Si está creando dos JAR de diferencia con dos conjuntos de clases diferentes, le recomiendo que divida el proyecto en dos módulos interdependientes.
Mientras puede hacer esto con los perfiles, le resultará más fácil dividir el proyecto en dos (en realidad tres). A más largo plazo, habrá retos a los que se enfrentará a medida que su aplicación se amplíe. Usted será responsable de averiguar esta lista manual de clases y paquetes que se incluirán en cada uno de sus JAR clasificados.
Hay una sobrecarga mínima para tener un proyecto principal simple que hace referencia a dos módulos separados. Si nos fijamos en el libro gratuito Maven por ejemplo, mostramos cómo hacer la transición entre un proyecto de módulo único y uno de varios módulos. Chapters 3-5 se enfoca en proyectos de un solo módulo, y Chapter 6 le muestra cómo combinaría estos componentes de módulo individual en un proyecto de varios módulos más grande.
Para más información:
Usted pregunta involucra los siguientes temas, aquí hay algunos enlaces que proporcionarán más detalles para cada uno:
El JAR plugin Maven: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
multi-módulo Proyectos Maven: Chapter 6 of Maven by Example y Section 3.6.2 of Maven: The Complete Reference.
El ciclo de vida de Maven (frasco está obligado a empaquetar si su packagin es "jar"): Section 3.5.2 of Maven by Example "Core Concepts" y Chapter 4 of Maven: The Complete Reference
Asambleas Maven: En primer lugar, la Maven Assembly Plugin site, entonces Chapter 8 of Maven: The Complete Reference por algunos detalles pesados (casi demasiado pesados).
+1 gracias, escuché por primera vez sobre ensambles – stacker
He utilizado ensamblajes para empaquetar el artefacto que construí junto con dependencias, scripts, etc. ¿Es común usar los ensamblajes para construir un subconjunto de archivos? ¿O es una mejor práctica dividir el subconjunto de archivos en su propio proyecto? –