2010-03-15 7 views
7

Ich habe eine vorhandene Pom-Datei, die einen Maven-Jar-Plugin-Abschnitt enthält. Es läuft für den Test-jar Ziel und wird derzeit mit Ausnahme von ein paar Verzeichnisse:maven-jar-plugin enthält vs ausschließt

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

ich eine Datei im Verzeichnis somedir aufnehmen müssen, aber der Rest der Dateien in dem Verzeichnis somedir wegzulassen. Ich habe gelesen, dass Vorrang vor ausschließen haben beinhaltet, damit ich so etwas wie die folgenden Text hinzugefügt (es gab keine umfasst vor Abschnitt):

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

Dies endet mit einer JAR-Datei für den Test zu schaffen mit nur wenigen Dateien darin (nur die Sachen in META-INF). Die Datei, die ich eingeschlossen habe, ist auch nicht im Glas. Was ich erwarten würde, ist ein Jar, der mit dem Jar identisch ist, der erstellt wurde, bevor meine Includes mit der einen zusätzlichen Datei geändert wurden.

Was fehlt mir hier?

Antwort

10

Erstens, wenn Sie keine includes angeben, dann wird das Maven jar Plugin **/** als Standardmuster verwenden (siehe o.a.m.p.j.AbstractJarMojo), das heißt es wird alles umfassen. Wenn Sie dieses Standardmuster überschreiben, wird das Plugin natürlich nur das enthalten, was Sie ihm mitteilen.

Zweitens wird das Verzeichnis Scannen am Ende durch die o.c.p.u.DirectoryScanner getan und das ist, was die javadoc der Klasse sagt:

 
* 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. 

Also, mit Ihrem aktuellen Satz von includes und excludes Mustern, nur ONE Die Datei stimmt mit dem Einschlussmuster überein, stimmt aber mit einem Ausschlussmuster überein und wird daher nicht ausgewählt. Sie erhalten ein fast leeres Archiv (mit dem Standardmanifest, siehe o.a.m.p.j.AbstractJarMojo#createArchive()).

Ich kann Ihnen nicht die exakte Lösung hier geben, aber Sie müssen deutlich die Art und Weise Sie/Ausschluss von Dateien (zum Beispiel mehr includes Muster hinzuzufügen, entfernen <exclude>somedir/**</exclude>, oder verwenden Sie includes nur, oder verwenden Sie excludes nur) zu überdenken.