gewusst wie: veröffentlichen von 3rdparty Artefakte mit Efeu und nexus
Bin ich fleißig immer meine Füße nass mit Efeu. Ich habe eine vorhandene nexus-repository läuft auf meinem lokalen PC und eine bestehende ant-build-Skript.
Funktionieren beide gut.
Teil des build-scripts müssen einige Dateien abrufen, die unser 3rdparty jar-Dateien (log4j, xmlbeans, junit, pdf, etc..) von einem Netzwerk-share - was ist klunky am besten.
Will ich mit ivy Abhängigkeit Mechanismen, um diese Dateien abrufen, die aus einem nexus-repository und verwenden Sie, dass in den build ein. Jeder 3rdparty lib hat einen Namen und eine beliebige Anzahl von Dateien (jar, dll -, Lizenz.dat, xml, etc).
Da haben wir eine große Anzahl dieser 3rdparty libs und jede lib hat mehrere Dateien - manuelle hochladen auf nexus ist keine option-ich brauche etwas, das ich verwenden können, um nehmen Sie eine Reihe von Dateien, geben Sie einen lib-name, die Versionsnummer und laden Sie das Ergebnis auf nexus. dann muss ich in der Lage sein, um diese abrufen von ivy.
Konnte ich die upload-Teil zu arbeiten, aber die retreival-Prozess nicht funktioniert. Mit unserem xmlbeans lib als Ausgangspunkt habe ich die folgenden ivy.xml Datei
<ivy-module version="1.0">
<info organisation="thirdparty_tools" module="xmlbeans" status="integration">
<publications>
<artifact name="jsr173_api" type="jar" ext="jar"/>
<artifact name="saxon-dom" type="jar" ext="jar"/>
<artifact name="saxon-xpath" type="jar" ext="jar"/>
<artifact name="saxon" type="jar" ext="jar"/>
<artifact name="xbean" type="jar" ext="jar"/>
<artifact name="xbean_xpath" type="jar" ext="jar"/>
<artifact name="xmlpublic" type="jar" ext="jar"/>
</publications>
</ivy-module>
dann einige ant-Skript zu veröffentlichen, die es auf nexus:
<ivy:resolve/>
<ivy:publish <ivy:publish resolver="thirdparty" forcedeliver="true" update="true" revision="${version}" overwrite="true">
<artifacts pattern="[artifact].[ext]"/>
<ivy:publish/>
Und das alles Prima funktioniert. Es veröffentlicht alle jar-Dateien von nexus im erwarteten Verzeichnis.
Das Problem kommt, wenn ich versuche, es in meinem build.
Ich habe die folgenden ivy.xml die Datei für mein build:
<ivy-module version="1.0">
<info organisation="myCompany" module="GLB_Data"/>
<dependencies>
<dependency org="thirdparty_tools" name="xmlbeans" rev="2.2.0"/>
</dependencies>
</ivy-module>
Dann, wenn ich meine bauen - er kann nichts finden:
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: thirdparty_tools#jsr173_api;2.2.0: not found
:: thirdparty_tools#saxon-dom;2.2.0: not found
:: thirdparty_tools#saxon-xpath;2.2.0: not found
:: thirdparty_tools#saxon;2.2.0: not found
:: thirdparty_tools#xbean;2.2.0: not found
:: thirdparty_tools#xbean_xpath;2.2.0: not found
:: thirdparty_tools#xmlpublic;2.2.0: not found
::::::::::::::::::::::::::::::::::::::::::::::
Scheint das problem zu sein mit diesem Muster:
WARN: ==== public: tried
WARN: http //localhost:8081/nexus/content/groups/public/thirdparty_tools/jsr173_api/2.2.0/jsr173_api-2.2.0.pom
WARN: -- artifact thirdparty_tools#jsr173_api;2.2.0!jsr173_api.jar:
WARN: http //localhost:8081/nexus/content/groups/public/thirdparty_tools/jsr173_api/2.2.0/jsr173_api-2.2.0.jar
ivy seems to be looking for the jsr173_api artifact under its own name, rather than under the xmlbeans folder where it was published to:
[ivy:publish] published jsr173_api to http //localhost:8081/nexus/content/repositories/thirdparty/thirdparty_tools/xmlbeans/2.2.0/jsr173_api-2.2.0.jar
(urls unkenntlich gemacht, um Unfälle zu vermeiden).
also irgendwie muss ich anders veröffentlichen oder abrufen anders. Ideen und Anregungen werden sehr geschätzt.
InformationsquelleAutor Jon | 2011-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nexus ist in Erster Linie ein Maven-repository, das bedeutet, man muss sich auf den Weg Maven Strukturen Artefakte.
Da Sie konzentriert sind auf bulk-laden von Nexus ich schlage vor, auf der Suche auf der Antwort auf folgende Frage:
Upload Artefakte zu Nexus, ohne Maven
Wenn Sie wollen stick mit Efeu gelesen.....
Hintergrund
Muss eine Maven POM
Ihre erste Problem ist, dass Ihre Maven Modul(E) braucht eine POM-Datei. Diese Datei beschreibt die maven-Modul und kann leicht erzeugt aus dem Inhalt von Ihrem ivy.xml - Datei (Siehe Lösung unten).
Zweitens, Maven meint, dass es eine primäre Artefakt gebaut. Zum Beispiel:
Maven-client übersetzen diese Informationen in die folgende URL:
Diese zeigt auf, wie Nexus speichern kann jede Art von Binär-Abhängigkeit. Die Verpackung parameter standardmäßig auf "jar".
Wie maven verarbeitet zusätzliche Modul Artefakte
Während Maven konzentriert sich auf einen einzigen build-Artefakt, ist es möglich, fügen Sie zusätzliche Ergänzende Artefakte, indem Sie in das selbe Verzeichnis (wie Sie getan haben).
Diese sind nicht aufgelistet in der Maven-POM. Statt einem Maven verwendet ein spezielles "classifier" - Attribut. Im folgenden wird eine mögliche Abhängigkeit der Erklärung.
Maven-client übersetzen diese in die folgende URL:
Open-source-Projekte werden in der Regel die Freigabe der source-code in dieser Art und Weise.
Ivy Lösung
So schließlich wie macht man veröffentlichen von Dateien in Nexus mit Efeu?
Zunächst entscheiden, welche Artefakt ist die "main" build-Artefakt, und fügen Sie einen zusätzlichen Eintrag für Ihre POM-Datei:
Die anderen Dateien können auch aufgeführt werden, aber jeder muss einen eindeutigen classifier - Attribut..... Hier werden Sie konfrontiert mit einem der klassischen Probleme der übersetzung eines ANT-Projekts in Maven.... Jede jar-Datei, die Sie veröffentlichen, wird wahrscheinlich benötigen, um eine separate POM. Sie nicht wirklich "zusätzliche" Artefakte.....
Vorgibt, dass Sie brauchen nicht zu veröffentlichen mehrerer Module.... Verwenden Sie die folgende build-targets zu publizieren Modul:
Nexus Anmeldeinformationen
Und der Vollständigkeit halber hier der ivysettings.xml - Datei mit dem Nexus repository-Speicherort und Zugangsdaten:
Update
Herunterladen Artefakte
Abrufen alle der veröffentlichten Artefakte (nicht nur der wichtigsten), müssen Sie Sie wie folgt:
Funktionell die gleiche wie die folgende Maven-fragment:
Also ging ich und wurde ein Eintrag Hinzugefügt:
<artifact name="xmlbeans" type="pom"/>
zu meinem ivy.xml Datei und re-publiziert. Es erstellt eine pom-Datei, wie erwartet (thirdparty_tools/xmlbeans/2.2.0/xmlbeans-2.2.0.pom). Aber.... Efeu ist nicht auf der Suche nach, dass. es will eine Datei namens: thirdparty_tools/xmlbeans/2.2.0/xmlbeans-2.2.0.xml was aber nicht vorhanden ist. Also habe ich den Eintrag geändert auf:<artifact name="xmlbeans" type="pom" ext="xml"/>
und es funktioniert wie erwartet.ok - das wird nicht funktionieren. Der Fehler ging Weg auf beheben, aber nichts ist immer heruntergeladen wenn ich eine abrufen. Eigentlich nur die .pom-Datei wird immer heruntergeladen, aber ich will die Artefakte (.zip .dll, etc.).
Ich erneut getestet und es funktioniert für mich. Sie erklärt den resolver korrekt, wenn das herunterladen aus dem Nexus-repo?
für die resolver habe ich dieses:
<ibiblio name="thirdparty" m2compatible="true" root="http://localhost:8081/nexus/content/repositories/thirdparty/"/>
Als für das herunterladen Zeug - Das Problem scheint zu sein, dass die ivy.xml Datei wird ignoriert in der download-Prozess, und alle ivy sieht in der pom-Datei, und was für Abhängigkeiten es hat. Was ist wirklich Rätsel ist mir, dass ivy erstellt, die URLs zu veröffentlichen.. noch ivy nicht verwenden können, die gleichen, die zum download Sachen. Das sagt mir, es ist ein grundlegender Fehler entweder in ivy ' s setup oder in meinem Verständnis von, wie es funktioniert.InformationsquelleAutor Mark O'Connor