Si potrebbe fare questo con i profili ...
Se davvero si voleva utilizzare due profili distinti e personalizzare il plugin JAR per includere ed escludere i modelli di nomi di classi e pacchetti, si potrebbe facilmente fare questo mettere qualcosa di simile nel tuo 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>
parte: Se questo sembra un sacco di configurazione, il supporto poliglotta di Maven per Groovy POM è quasi pronto. Ridurrà notevolmente il conto alla rovescia.
Mettete questo alla fine del vostro pom.xml (con l'elemento del progetto) e aggiunge due profili. Il primo profilo "tutto" è davvero lì solo per dimostrare la configurazione. Questo profilo "tutto" non è necessario perché duplica semplicemente il comportamento dell'output dell'obiettivo jar del plug-in JAR predefinito. Il secondo profilo "solo-libreria" esclude qualsiasi classe in qualsiasi pacchetto che inizia con il testo "Principale". Per richiamare questi profili:
mvn package -Peverything
mvn package -Ponly-library
Ho provato questo contro l'applicazione di esempio che viene fornito con Chapter 6 of Maven by Example, e l'esecuzione di uno di questi comandi produrrà un file JAR in $ {} basedir/bersaglio che ha un classificatore. Poiché l'obiettivo jar del plug-in JAR è associato alla fase del pacchetto nel ciclo di vita predefinito di maven, questi due profili modificheranno la configurazione per questo plug-in.
Oppure, si potrebbe fare questo con due JAR esecuzioni di plugin ...
Se è necessario creare due vasetti senza l'utilizzo di profili. È possibile associare più volte l'obiettivo jar del plug-in JAR alla fase del ciclo di vita del pacchetto e utilizzare una configurazione diversa per ogni esecuzione configurata. Se si configurano due esecuzioni separate, ogni esecuzione ha un blocco di configurazione specifico dell'esecuzione in modo da poter fornire un identificativo univoco e un modello di inclusione/esclusione per ciascuna esecuzione.
Ecco l'elemento di generazione che si utilizzerà per aggiungere entrambi i JAR personalizzati al "pacchetto" della fase del ciclo di vita. Eseguendo questa operazione su un progetto con "jar" di imballaggio, l'obiettivo jar viene eseguito tre volte. Una volta come il collegamento del ciclo di vita predefinito, e poi due volte per due JAR classificati personalizzati.
<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>
Se non si sta parlando tra cui un diverso insieme di classi in ogni artefatto, ti consigliamo di utilizzare Assemblee Maven. Se vuoi conoscere i dettagli degli assembly, c'è un capitolo elencato alla fine di questa risposta di Maven: The Complete Reference. Francamente, non penso che questo particolare capitolo sia un buon riferimento introduttivo; in effetti, ho avuto numerosi rapporti sul fatto che questo capitolo è quasi illeggibile (e stiamo lavorando per risolverlo). Se stai cercando di utilizzare gli assembly, ti consigliamo lo Maven Assembly Plugin's documentation. Nel menu di navigazione a sinistra vedrai un elenco di descrittori dell'assieme di campioni.
Disclaimer: (Per favore) non farlo. Se stai creando due JAR di differenza con due diversi gruppi di classi, ti consiglio vivamente di dividere il progetto in due moduli interdipendenti.
Mentre è possibile farlo con i profili, sarà più facile dividere il progetto in due (in realtà tre). A lungo termine ci saranno sfide che dovrai affrontare mentre la tua applicazione si ridimensiona. Sarai responsabile della ricerca di questo elenco di manuali di classi e pacchetti da includere in ciascuno dei tuoi JAR classificati.
C'è un sovraccarico minimo per avere un progetto genitore semplice che faccia riferimento a due moduli separati. Se guardi il libro Maven gratuito di Example, ti mostriamo come effettuare la transizione tra un modulo singolo e un progetto multi-modulo. Chapters 3-5 concentrarsi su singoli progetti di modulo e Chapter 6 mostra come si combinano questi singoli componenti del modulo in un progetto multi-modulo più grande.
Per maggiori informazioni:
È questione coinvolge i seguenti argomenti, ecco alcuni link che forniranno maggiori dettagli per ogni:
Il Plugin JAR Maven: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
Multi-module Progetti Maven: Chapter 6 of Maven by Example e Section 3.6.2 of Maven: The Complete Reference.
The Maven ciclo di vita (vaso è destinata a confezionare se il packagin è "jar"): Section 3.5.2 of Maven by Example "Core Concepts" e Chapter 4 of Maven: The Complete Reference
Assemblee Maven: In primo luogo, il Maven Assembly Plugin site, poi Chapter 8 of Maven: The Complete Reference per alcuni pesanti (quasi troppo pesanti) dettagli.
+1 grazie, la prima volta che ho sentito parlare degli assembly – stacker
Ho usato gli assembly per il confezionamento degli artefatti che ho costruito insieme a dipendenze, script, ecc. È comune usare gli assembly per creare un sottoinsieme di file? O è una pratica migliore per dividere il sottoinsieme di file nel proprio progetto? –