2010-03-15 35 views
7

Ho un file pom esistente che include una sezione di plugin per jar-maven. Si corre per l'obiettivo di test-vaso e sta attualmente esclude alcune directory:maven-jar-plugin include vs excludes

<excludes> 
    <exclude>...</exclude> 
    <exclude>...</exclude> 
    <exclude>somedir/**</exclude> 
</excludes> 

ho bisogno di includere un file nella directory somedir ma lasciare fuori il resto dei file nella directory somedir. Ho letto che include avere la precedenza su esclude così ho aggiunto qualcosa di simile a quanto segue (non c'era include sezione prima):

<includes> 
    <include>somedir/somefile.xml</include> 
</includes> 

questo finisce per creare un file jar per il test con solo pochi file in essa contenuti (solo le cose in META-INF). Il file che ho incluso non è nemmeno nel barattolo. Quello che mi aspetterei è un barattolo identico al barattolo creato prima che il mio includesse le modifiche con l'altro file.

Cosa mi manca qui?

risposta

10

Innanzitutto, se non si specifica alcun includes, il plug del vaso Maven utilizzerà **/** come modello predefinito (vedere o.a.m.p.j.AbstractJarMojo), cioè includerà tutto. Se si sostituisce questo modello predefinito, il plugin includerà ovviamente solo ciò che gli si dice di includere.

In secondo luogo, la scansione di directory è fatto alla fine dal o.c.p.u.DirectoryScanner e questo è ciò che il Javadoc della classe dice:

 
* The idea is simple. A given directory is recursively scanned for all files 
* and directories. Each file/directory is matched against a set of selectors, 
* including special support for matching against filenames with include and 
* and exclude patterns. Only files/directories which match at least one 
* pattern of the include pattern list or other file selector, and don't match 
* any pattern of the exclude pattern list or fail to match against a required 
* selector will be placed in the list of files/directories found. 

Così, con il tuo attuale set di includes e excludes modelli, solo ONE Il file corrisponderà al modello di inclusione ma corrisponderà anche a un modello di esclusione e quindi non verrà selezionato e si otterrà un archivio quasi vuoto (con solo il manifest predefinito, vedere o.a.m.p.j.AbstractJarMojo#createArchive()).

non si può dare la soluzione esatta qui, ma chiaramente bisogno di ripensare il modo di includere/escludere i file (ad esempio aggiungere più includes modelli, rimuovere <exclude>somedir/**</exclude>, o utilizzare includes solo, o utilizzare excludes solo).