2015-07-27 9 views
9

Ich möchte alle verfügbaren Dateien in einer Abhängigkeit zu meinen Artefakten hinzufügen, damit ich diese Abhängigkeit in ein anderes Nexus-Repository hochladen kann.Gradle: Alle Dateien in einer Abhängigkeit vom Maven-Repository abrufen

Meine Abhängigkeit enthält 15 Dateien in meinem Nexus-Repository unter dem gleichen GAV gespeichert:

myproject.jar 
myproject.jar.md5 
myproject.jar.sha1 

myproject-sources.jar 
myproject-sources.jar.md5 
myproject-sources.jar.sha1 

myproject.tgz 
myproject.tgz.md5 
myproject.tgz.sha1 

myproject.pom 
myproject.pom.md5 
myproject.pom.sha1 

maven-metadata.xml 
maven-metadata.xml.md5 
maven-metadata.xml.sha1 

Die -sources.jar Datei hat eine <classifier>sources</classifier> Eigenschaft, die tgz und pom-Dateien haben eine <extension> Eigenschaft und die anderen haben nichts Besonderes.

Die Sache ist, ich möchte so viel wie möglich hardcoding vermeiden, in der Lage sein, nur die GAV-Parameter zu meinem Skript zu übergeben und es kann für alle GAV, egal welche Dateien stehen zur Verfügung.

Die Lösung, die ich jetzt gerade arbeite ist direkt mit dem Nexus Repo abzufragen, um die Dateiliste mit einer URL wie folgt zu erhalten:

http://mynexushost:8081/nexus/service/local/repositories/snapshots/content/${group}/${artifact}/${version}/

Das ist mir eine JSON (mit dem Accept-Header sendet (auf application/json gesetzt), die die URLs und Zeug enthält, die ich benötige, um alle verfügbaren Dateien wiederherzustellen, lade sie herunter und füge sie meinen Artefakten hinzu und lade sie dann in mein Ziel-Repository hoch.

Ich bin ziemlich sicher, dass diese Lösung funktioniert, aber es ist definitiv nicht der "Gradle Weg", es zu tun, da es mich an Nexus bindet und nicht die eingebauten Maven-Abhängigkeitsauflösungsdienstprogramme verwendet.

Wie kann ich das lösen, ohne die Nexus API abzufragen?

+2

Kannst du eine Gradle-Abhängigkeit deklarieren? Warum brauchen Sie alle spezifischen Dateien? – approxiblue

+0

Ich möchte den gleichen genauen GAV in einem anderen Nexus Repo reproduzieren. Vielleicht muss ich nicht alle Dateien einzeln angeben, aber mit dem Defaut-Gradle-Weg, um Abhängigkeiten zu behandeln, bekomme ich nur die 'myproject.jar'-Datei. Und ich möchte die Erweiterungen in meinem Bereitstellungsskript nicht fest codieren, ich möchte es allgemein halten. – Johnride

+0

Bedeutet das, dass Sie [einige Artefakte in einem anderen Repository bereitstellen] (https://docs.gradle.org/current/userguide/maven_plugin.html#sec:deploying_to_a_maven_repository)? – approxiblue

Antwort

1

Ich habe ein Tool namens Maven Repository Provisioner erstellt, die dies ziemlich genau erreicht. Sie können es unter https://github.com/simpligility/maven-repository-tools

Es wird in der Produktion für genau den Zweck, den Sie wollen, aber es berechnet auch und verwendet alle transitiven Abhängigkeiten und benötigten Eltern Poms. Schau es dir an und wenn es nicht alles macht, was du willst ... Ich nehme Pull-Anfragen ;-)

+0

Das klingt gut, die Sache ist, ich möchte ein Grapleskript ausführen, um dies zu tun, wie all meine Build und Deployment mit Gradle gebaut wird. Plus mit der Zeit konnte ich selbst eine erstellen. Leider kann ich es nicht öffnen, wie ich es für einen Kunden entwickelt habe. Danke für die Antwort. – Johnride

+0

Sie könnten ein Gradle-Plugin um mein Werkzeug wickeln. In der Tat plane ich, ein Maven-Plugin für die Straße zu machen. –

Verwandte Themen