maven assembly, vollständiger Pfad in zip-Datei zu vermeiden?

9

Ich habe ein Projekt mit mehreren Modulen, das zwei Module enthält (jedes mit seiner eigenen pom.xml) und eine Elternpom.xml, die auf diese Module zeigt.

Wenn ich "mvn clean package" auf dem Eltern-Pom ausführe, endet jedes Projekt mit einer Zip-Datei unter seinem eigenen Zielordner. Ich möchte eine Zip-Datei verpacken, die jede Modul-Zip-Datei im Stammordner der Zip-Datei enthält, aber ich habe einige Probleme dabei.

Ich habe eine Assemblydatei im übergeordneten pom.xml-Ordner erstellt:

%Vor%

Während das obige funktioniert, wenn wir mehr und mehr Module zu diesem Projekt hinzufügen, wird es sehr ärgerlich, diese Baugruppe ständig aktualisieren zu müssen.

Idealerweise möchte ich, dass es automatisch in jeden Zielordner für ein Modul geht und eine ZIP-Datei dort einholt.

Dies kann durch Ausführen von

erreicht werden %Vor%

Das Problem hierbei ist jedoch, dass die ZIP-Datei vollständige Pfade enthält. Anstatt ZIP-Dateien im Stammordner zu haben, wird die ZIP-Datei daher genau die Datei projectA / target / xxxx.zip und die Datei projectB / target / xxxx.zip enthalten was ich nicht will.

Gibt es eine Möglichkeit, eine einfache Assembly in Maven zu erstellen, so dass ich sie nicht jedes Mal aktualisieren muss, wenn ich ein neues Modul hinzufüge und keine vollständigen Pfade innerhalb der ZIP habe?

EDIT 1

Es sieht so aus, als ob das nicht möglich ist. Entweder erhalten Sie eine schön strukturierte Zip-Datei mit einer schwer zu wartenden Assembly oder Sie erhalten eine einfach zu pflegende aber announcemently strukturierte Zip-Datei. Ich werde das unbeantwortet lassen, bis ich eine richtige Lösung finden kann

EDIT 2

Zurück auf der Suche nach einer Lösung für diese wieder. In Bezug auf khmarbaise Lösung unten gibt es ein paar Probleme damit: - Es beruht auf Assemblies von Abhängigkeiten, in meinem Fall möchte ich nur eine Assembly von Assemblys (die mehr wie FileSets und nicht Abhängigkeitsset sind) - Die Tatsache, dass es darauf beruht, dass ich manuell festlege, welche Projekte ich in die Versammlung aufnehmen möchte. Ich habe diese Information bereits im Eltern-Pom, die angibt, welche Module erstellt werden sollen. Wenn ich also ein Modul aus dem Eltern-Pom entferne, sodass es nicht mehr gebaut wird, sollte die Assembly das bereits wissen und die Auswahl dieses Projekts überspringen Dateisatz scheint so gut zu funktionieren, außer für den beschissenen, nicht steuerbaren Pfad innerhalb der Assembly zip). Ich sollte nicht manuell mit den Modulen, die ich enthalten möchte, durcheinander bringen, außer einfach das Hinzufügen von Modulen aus dem Pom, von dem ich die Assembly verwende, zu entfernen.

Hat niemand wirklich jemals auf ein ähnliches Problem gestoßen?

    
ByteFlinger 12.09.2013, 12:10
quelle

2 Antworten

4

Zuerst würde ich vorschlagen, ein dist-packing-Modul zu erstellen, das das resultierende Paket enthält. Außerdem klingt es so, als wäre dein Assembly-Deskriptor zum Erstellen des endgültigen Archivs, das die Zip-Dateien anderer enthält, falsch.

%Vor%

Aber Sie müssen sich bewusst sein, dass Sie die Abhängigkeiten im dist-Modul als übliche Modulabhängigkeiten wie die folgenden pflegen müssen:

%Vor%

Hier finden Sie ein vollständiges funktionierendes Beispiel .

    
khmarbaise 15.09.2013 17:11
quelle
0

Ich habe gerade das gleiche Problem: Meine resultierende ZIP-Datei enthielt den vollständigen Systempfad! Meine ursprüngliche Konfiguration sah so aus:

%Vor%

Als Ergebnis enthielt meine Zip-Datei den vollständigen Systempfad! Nach vielen Nachforschungen fand ich eine funktionierende Lösung:

%Vor%

Wenn also outputDirectory mit ${project.build.directory} angegeben wird, dann wird der vollständige Pfad aus irgendeinem seltsamen Grund Teil der jar / zip-Datei sein.

    
Lonzak 17.10.2017 15:45
quelle