alle Maven-Abhängigkeiten einschließlich Plugin-Abhängigkeiten abrufen

9

Ich versuche, maven alle Abhängigkeiten herunterzuladen (kompilieren, testen, plugins usw.), damit ich vermeiden kann, dass unsere dockerisierten Builds unnötigen Zeitaufwand beim wiederholten Herunterladen von ihnen verschwenden.

Wir haben unseren maven build dockerisiert, so dass wir ihn von unseren jenkins ausführen können, ohne viele Build-spezifische Abhängigkeiten auf der jenkins-Maschine installiert zu haben (Java, redis, maven dependencies, etc.). Unser Build basiert auf inkrementellen Docker-Builds, die nur Schritte ausführen, die tatsächlich erneut ausgeführt werden müssen.

Unser Haupt-Build ist eine Docker-Datei, die mehrere Schritte hat, um jdk, maven usw. zu installieren. Dann macht es ein

COPY ./pom.xml /opt/inbot-api/pom.xml RUN mvn dependency:copy-dependencies clean

Dies wird Abhängigkeiten zu dem lokalen Maven-Repository herunterladen und dann das Zielverzeichnis bereinigen.

Dann kopieren wir den Quellbaum in das Bild und führen den vollständigen Build aus.

COPY ./src /opt/inbot-api/src RUN mvn -e clean install

Die allgemeine Idee ist, dass docker auf einer sauberen Maschine alle RUN-Schritte ausführt, aber bei inkrementellen Builds nur Dinge erneut ausführt, die erneut ausgeführt werden müssen. Nach jedem Ausführungsschritt speichert es ein Zwischenbild. Wenn sich die Pom-Datei also nicht ändert, müssen Sie den Schritt zum Abrufen von Abhängigkeiten nicht erneut ausführen, da dies genau das gleiche Ergebnis liefert. Stattdessen lädt es das zwischengespeicherte Zwischenbild mit allen bereits heruntergeladenen Abhängigkeiten. Genau das wollen wir.

Es gibt viel mehr zu unserer DockerFile, das hier nicht so relevant ist, aber letztendlich erzeugt es eine Docker-Datei mit unseren kompilierten Artefakten, einer nginx-Konfiguration und all unseren Laufzeitabhängigkeiten, die wir in ECS bereitstellen können.

Das funktioniert fast, außer dass mvn clean install immer noch zusätzliche Plugin-Abhängigkeiten auf jedem Build herunterlädt. Dies sind also Abhängigkeiten, die der Kopierabhängigkeitsschritt nicht abdeckt.

Meine Frage, wie bekomme ich RUN mvn dependency:copy-dependencies clean , um alle Abhängigkeiten einschließlich der Pluginabhängigkeiten herunterzuladen. Ich habe gesehen, dass Leute tatsächlich ein mvn verify clean anstelle von mvn dependency:copy-dependencies clean machen, aber das ist in unserem Fall ziemlich langsam. Ich habe mich gefragt, ob es einen besseren Weg dafür gibt.

Ich würde mich über Feedback freuen, wie ich das verbessern kann.

Aktualisieren

Ich mache jetzt ein

RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline clean

Und es lädt immer noch mehr Sachen mit dem mvn clean install herunter. A mvn -o clean install schlägt immer noch fehl, trotz dependency:go-offline . So, es scheint, dass dieses Plugin kaputt ist.

    
Jilles van Gurp 10.12.2015, 13:28
quelle

1 Antwort

1

Für das Plugin würde ich vorschlagen, mvn dependency:resolve-plugins

zu verwenden

Siehe die Dokumentation: Ссылка

    
khmarbaise 10.12.2015 16:20
quelle

Tags und Links