2013-07-25 5 views
6

jede Hilfe oder Zeiger würde wirklich sehr geschätzt werden. Ich muss zwei Felder in die Manifest-Datei aller Abhängigkeits-JARs meines Projekts zur Build-Zeit einfügen.Maven: Ändern der Manifest-Dateien der Abhängigkeit JARs

Die Abhängigkeitsgläser sind bereits erstellt und werden aus einem Repo gezogen. Ich muss einen Weg finden, um die Manifest-Datei der JAR zu bekommen und dann ändern Sie es mit den Variablen in meiner aktuellen Pom-Datei. Hat jemand das schon mal gemacht, weiß wie man das macht. Vielen Dank im Voraus für Ihre Zeit und Antwort

+6

Warum möchten Sie das tun, weil diese Artefakte bereits gebaut sind, also unveränderlich sind. Sie können diese Artefakte über eine Kombination aus maven-dependency-plugin und maven-assembly-plugin ändern, aber es würde eine wirklich große Pom-Datei ergeben. Auf der anderen Seite verändern Sie bereits gebaute Artefakte, die gegen die Idee von Maven verstoßen. – khmarbaise

+0

@Wimpie Haben Sie die Lösung gefunden? –

+0

Das 'maven-assembly-plugin' erlaubt Ihnen, die manifest config anzugeben, jedoch gibt es derzeit einen [bug] (http://jira.codehaus.org/browse/MASSEMBLY-450), der verhindert, dass ein existierendes Manifest zusammengeführt wird mit zusätzlichen Manifesteinträgen. Ich habe das gefunden, weil ich versucht habe, dasselbe zu tun und gescheitert ist. – user944849

Antwort

0

Dies ist nicht wirklich etwas, das Maven Ihnen erlaubt. Aus der Perspektive von Maven sollte jede JAR mit einem spezifischen Namen genau so wie jede andere JAR mit dem gleichen Namen sein.

Zum Beispiel, sagen wir, mein Projekt ist abhängig von abc-1.0.jar. Ich gebe diese Abhängigkeit an, weil das ALphabet-Team eine abc-Bibliothek mit einer bestimmten API für die 1.0-Version veröffentlicht hat. Ich sollte in der Lage sein, diese Jar-Datei von jedem Repository in der Welt zu bekommen, sogar von meinem Nachbarn auf der Straße, wenn mein Internet ausgeht und es manuell in meinem lokalen Repository installiert, und es sollte genau die gleiche Datei sein. Wenn es nicht die gleiche Datei wäre, dann hätte ich nicht die Garantie, dass die .class Dateien im Jar den Bibliothekscode enthalten, den ich benötige, damit mein Build fehlerfrei funktioniert.

Wenn Sie wirklich sind motiviert, um diese Arbeit zu machen, nun ja, es ist theoretisch möglich. Sie können ein Skript schreiben, das wird:

  1. die POM XML für den properties Abschnitt analysieren und die einzelnen Eigenschaften von dort sowie die Namen der Abhängigkeit Gläser
  2. mit einem Klassifizierer Für jede Abhängigkeit jar parsen " manifest_injected ", versuchen Sie es im lokalen Repository zu finden. Wenn es nicht vorhanden ist, generieren Sie ein leeres Maven-Projekt mit den angegebenen Abhängigkeiten (ohne den Klassifikator manifest_injected), führen Sie mvn validate darauf aus, um sicherzustellen, dass die Abhängigkeiten heruntergeladen und in das lokale Repository gestellt wurden, wenn sie gefunden wurden
  3. Clone alle genannten JAR-Dateien, öffnen Sie die Klone, führen Sie die gewünschte Manifest-Injektion mit den zuvor analysierten Eigenschaften durch und speichern Sie die injizierten Jars an den richtigen Stellen im Maven-Repository
  4. Rufen Sie den Maven-Build auf, der an das Skript übergeben wurde ein Argument.

Viel Glück!

0

Sie können es einfach in Ihrem binären Repository tun. Mit Artifactory können Sie beispielsweise a user plugin that will be triggered on any download schreiben. In diesem Listener können Sie Ihren eigenen Code schreiben - öffnen Sie das Jar, ändern Sie das Manifest und servieren Sie das geänderte Jar anstelle des Originals (und cachen Sie es für das nächste Mal).