Das Assembly-Plugin ist normalerweise das letzte, was ein Maven-Power-User lernt zu meistern. Es hat seine Macken, aber (wie immer) wenn du erst einmal verstehst, was es wirklich macht und was noch wichtiger ist, wie es funktioniert, wirst du es einfacher finden, damit zu arbeiten.
Angenommen, Sie haben ein Multi-Modul zu bauen, wie so:
pom.xml (root pom that lists the modules mod1, mod2, mod3 and assembly)
|
+-- mod1
| |
| +-- pom.xml
|
+-- mod2
| |
| +-- pom.xml
|
+-- mod3
| |
| +-- pom.xml
|
+-- assembly
|
+-- pom.xml
+-- assembly-file.xml (the assembly descriptor)
Alles aufgeführt in <moduleSets>
gilt für mod1
, mod2
, mod3
undassembly
. Sie haben <includeDependencies>false</includeDependencies>
unter <binaries>
angegeben, so dass in dieser Konfiguration beinhaltet keine Abhängigkeiten, nur die erzeugten Artefakte, die durch mod1
, mod2
, mod3
undassembly
.
Meistens neige ich dazu, <packaging>pom</packaging>
für das assembly
Modul anzugeben. Der Grund dafür ist, dass die Assembly in der Regel keinen Code enthält, es ist nur eine Assembly, also bin ich nicht daran interessiert, irgendetwas davon aufzunehmen.
In der anderen Ecke, <dependencySets>
(nicht derjenige unter <binaries>
) gilt für die Abhängigkeiten des assembly
POM nur, sonst nichts. Wenn Sie also mod1
, mod2
und mod3
nicht als Abhängigkeiten zum Assembly POM angeben (was völlig in Ordnung ist, wenn es das ist, was Sie wollen), wird <dependencySets>
nicht viel bewirken; Ansonsten funktioniert es wie erwartet.
Der Abschnitt <binaries>
enthält einen eigenen <dependencySets>
, wenn Sie den Dependency-Set des gesamten Multi-Modul-Builds konfigurieren möchten. Aber in Ihrem speziellen Fall haben Sie <includeDependencies>false</includeDependencies>
deklariert, so dass ein <dependencySets>
unter <binaries>
widersprüchlich wird.
Schließlich <fileSets>
und <files>
gelten für die assembly
POM, so dass, wenn es irgendwelche Dateien in diesem Projekt sind (zum Beispiel unter src/main/resources
), werden Sie ihn nicht benutzen sein. Wenn Sie bestimmte Dateien von mod1
, mod2
oder mod3
einbeziehen müssen, verwenden Sie <unpackOptions>
, entweder unter <binaries>
oder <dependencySets>
, je nachdem, was Sie tun möchten.