Ich verwende das Maven 2-Assembly-Plug-In, um ein jar-with-dependencies zu erstellen und eine ausführbare JAR-Datei zu erstellen. Meine Assembly enthält Spring und die CXF-Bibliothek.
CXF enthält Kopien der META-INF-Dateien spring.schemas und spring.handlers, die die gleichen Dateien aus dem Spring-2.5.4-Glas überdecken.
Von Hand kann ich diese zwei Dateien innerhalb der jar-with-dependencies aktualisieren.
Was ich suche, ist ein Weg in Maven POM, um das Assembly-Plug-In zu leiten, um die richtige Version dieser beiden Dateien zu erhalten.
Die Assembly-Plug-In-Dokumentation behandelt die Filterung von Dateien, scheint aber keine Konfiguration für oder Parameter zu haben, ohne sich um die Erstellung eines benutzerdefinierten Assembly-Deskriptors zu kümmern.
Mache ich einen benutzerdefinierten Assembly-Deskriptor nur in dieser Instanz?
Aus irgendeinem Grund funktioniert die Lösung, die Mojo und die anderen vorschlagen, immer noch nicht für mich. Ich habe meine eigenen spring.handlers
und spring.schemas
Dateien erstellt und sie unter src/main/resources/META-INF
abgelegt. Bei Verwendung von unpackOptions
werden meine Dateien jedoch ebenfalls nicht berücksichtigt. Wenn ich nicht unpackOptions
verwende, sind meine Dateien nicht diejenigen im Jar.
Was ich getan habe, ist, die Dateien direkt zu referenzieren. Dies bringt meine Dateien schließlich in das JAR.
%Vor%Ich würde vorschlagen, stattdessen das maven-shade-plugin zu verwenden. Wenn du dir den Pom für das cxf-Bundle anschaust ( Ссылка ) Sie können sehen, wie Sie die Schattentransformatoren verwenden können, um die spring.schemas und andere notwendige Dateien zusammenzuführen.
Ich habe es ausgearbeitet, und hier sind die Details:
Erstens gibt es keine Möglichkeit, Dateieinschlüsse anzugeben oder auszuschließen, wenn Sie den integrierten Assemblydeskriptor jar-with-dependencies verwenden.
Die Assembly-Plug-In-Dokumentation enthält das Beispiel jar- with-dependencies descriptor hier .
Ich habe diesen Deskriptor kopiert und in eine Datei in meinem Projektverzeichnis namens exec-jar.xml eingefügt. Dann habe ich in der Pom das Assembly-Plug-in geändert, um auf diesen Deskriptor zu verweisen. Hier ist der Auszug:
%Vor%Dieses Bit des Deskriptors bindet die Assembly an die Paketphase des Lebenszyklus und verweist auf den Deskriptor exec-jar.xml. Durch das Ausführen dieses Pakets wurde bestätigt, dass das JAR genauso wie mit dem vordefinierten Deskriptor erstellt wurde.
Also muss man exec-jar.xml modifizieren, um die CXF-Dateien auszuschließen, die mit den Spring-Dateien in Konflikt stehen. Hier ist mein Assembly-Deskriptor, der folgendes erreicht hat:
%Vor%Jetzt ist der Haken. Wenn Sie dies mit dem derzeit veröffentlichten Assembly-Plug-in, Version 2.1, tun, schlägt es auf dem Tag als "unerwartet" fehl. Das Tag wird in der unveröffentlichten Version 2.2 des Plugins unterstützt. Beachten Sie in meinem Pom-Datei-Auszug oben, dass ich maven-assembly-plugin Version 2.2-beta-3, die zum Zeitpunkt des Schreibens die neueste war.
Dies hat erfolgreich ein ausführbares jar erstellt, und Spring hatte alle Handler und Schemas, die zum Initialisieren meiner App benötigt wurden.
Sie können das Problem auch umgehen, indem Sie die Dateien spring.schemas und spring.handlers von der gewünschten Frühlingsdistribution abrufen und in Ihr Projektverzeichnis src / main / resources / META-INF einfügen. Da diese zuletzt gepackt werden, erhalten Sie die gewünschte Version. Ich fand die Idee hier