Domanda

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

<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 la roba in META-INF). Il file che ho inserito non è nel vaso sia. Quello che mi aspetto è un vaso che è identico al vaso che è stato creato prima del mio include il cambiamento con quello file aggiuntivo.

Che cosa mi manca qui?

È stato utile?

Soluzione

In primo luogo, se non si specifica alcuna includes, allora il plugin Maven vaso utilizzerà **/** come modello di default (vedi o.a.m.p.j.AbstractJarMojo ) Vale a dire che includerà tutto. Se si ignora questo schema predefinito, il plugin sarà ovviamente include solo quello che gli dici di includere.

In secondo luogo, la scansione della directory viene fatto alla fine da parte del 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 serie di modelli includes e excludes, solo UNA file corrisponderà al modello di inclusione, ma anche corrispondere a un modello di esclusione e pertanto non sarà selezionato e si ottiene un archivio quasi vuoto ( con appena il manifesto di default, vedere o.a.m.p.j.AbstractJarMojo#createArchive() ).

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top