2016-06-30 33 views
1

Brauchen Sie Hilfe beim Verständnis der Blasmaven-Montagedatei. Wir haben viele Maven-Projekte, das kopiert alle Abhängigkeiten in den Ordner xc/plugins. Aber ich habe eine Abhängigkeit hinzugefügt, die nicht gepackt wurde. Später fand ich, dass ich es unter Abhängigkeit nicht unter dependencySet hinzufügen muss. Auch wenn ich es nur unter dem Eltern-Pom hinzufügen muss, wird es hinzugefügt. Wenn Sie es unter Child-Pom-Dateien hinzufügen, wird es nicht gepackt. Brauche Hilfe, dies zu verstehen.maven assembly packge developing

Wie es alle Abhängigkeitsgläser auswählt.

Antwort

1

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, mod3undassembly. 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, mod3undassembly.

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.