Wie kann ich Maven dazu bringen, den Versuch zu stoppen, nach Updates für Artefakte einer bestimmten Gruppe von maven-central-repo zu suchen?
Lesezeit: 6 Minuten
Ich arbeite an einem ziemlich großen Maven-Projekt. Wir haben wahrscheinlich ungefähr 70 einzelne Artefakte, die grob in zwei Bibliotheken mit gemeinsam genutztem Code und vielleicht zehn Anwendungen, die sie verwenden, aufgeteilt sind. Alle diese Elemente befinden sich im Namensraum com.mycompany.*.
Meistens laufen wir gegen Snapshot-Builds. Um also eine Anwendung vollständig zu erstellen, kann ich zuerst die Bibliotheksprojekte so erstellen, dass sie in meinem lokalen Repository installiert werden (z. B. mycompany-libname-2.4-SNAPSHOT.jar).
Das Problem ist, dass ich dann beim Erstellen der Anwendungen gehe. Aus irgendeinem Grund möchte Maven die beiden wichtigsten öffentlichen Repositories (maven-net-repo und java-net-repo) auf Updates für alle überprüfen mycompany-*-SNAPSHOT.jar Artefakte. Natürlich werden sie dort nicht gefunden, und alles löst sich schließlich wieder auf die Versionen auf, die ich gerade in meinem lokalen Repository erstellt habe, aber ich möchte, dass Maven damit aufhört, weil (a) ich mich dadurch wie ein schlechter net.citizen fühle für das ständige Überprüfen dieser Repositories auf Dinge, die niemals dort sein werden, und (b) es fügt meinem Build-Prozess eine unnötige und lästige Netzwerklatenz hinzu.
Ich habe Maven die meiste Zeit im Offline-Modus ausgeführt, um dies zu umgehen, aber das ist nicht ideal, da gelegentlich eine Abhängigkeit von einer öffentlichen Bibliothek aktualisiert wird. Was ich also suche, ist eine Lösung, die dazu führt, dass Maven nicht nach Updates aus bestimmten Repositories für Artefakte sucht, die bestimmte Kriterien erfüllen. In diesem Fall wäre ich froh, wenn Maven entweder SNAPSHOT-Versionen oder Artefakte ignorieren würde, die darin enthalten waren das com.mycompany Namensraum.
Jeff Tsay
Außerdem können Sie verwenden -o oder --offline in der mvn-Befehlszeile, die Maven in den “Offline-Modus” versetzt, sodass nicht nach Updates gesucht wird. Sie erhalten eine Warnung, dass Sie keine Abhängigkeiten erhalten können, die sich nicht bereits in Ihrem lokalen Repo befinden, aber keine große Sache.
Dadurch wird verhindert, dass Maven auch freigegebene Abhängigkeiten herunterlädt. Möglicherweise möchten Sie eine neuere Version der freigegebenen Bibliothek, ohne dass Snapshots auf Aktualisierung geprüft werden
– Kobold
12. Mai 2014 um 12:21 Uhr
Dies ist eindeutig keine Antwort auf die ursprüngliche Frage! Wie kann es so viele Upvotes haben??? Das OP hat ausdrücklich geschrieben, dass er versucht hat, Maven im Offline-Modus auszuführen, aber es ist nicht ideal für seinen Zweck!
– Honza Zidek
19. Juni 2017 um 9:54 Uhr
Ich denke, diese positiven Stimmen waren wie meine: Dies ist die einzige Antwort, die mein Problem löst: \
– Juh_
12. Januar 2021 um 11:17 Uhr
joostschouten
Etwas, das jetzt auch in maven verfügbar ist, ist
mvn goal --no-snapshot-updates
oder kurz
mvn goal -nsu
Nur für den Fall, dass irgendwelche SBT-Leute hier landen: set offline := true in der Sitzung bzw offline := true in build.sbt.
– opyieren
13. Oktober 2012 um 9:30 Uhr
Auch die nsu Option ist in v 3.0.3 defekt (Siehe MNG-5064). Um diese Option zuverlässig nutzen zu können, müssen Sie möglicherweise mindestens auf v. 3.0.4 oder v. 3.0.5 aktualisieren
– Ashutosh Jindal
27. März 2013 um 9:22 Uhr
ziemlich das Beste
– AntJavaDev
17. April 2018 um 14:21 Uhr
Bei mir ändert sich nichts :\
– Juh_
12. Januar 2021 um 11:17 Uhr
Das updatePolicy-Tag hat bei mir nicht funktioniert. Rich Seller erwähnte jedoch, dass Snapshots sowieso deaktiviert werden sollten, also schaute ich weiter und bemerkte, dass das zusätzliche Repository, das ich zu meiner settings.xml hinzugefügt hatte, das Problem tatsächlich verursachte. Das Hinzufügen des Snapshots-Abschnitts zu diesem Repository in meiner settings.xml hat den Zweck erfüllt!
Vielen Dank für die Antwort. Mir hat es letztendlich geholfen. Ich hatte einige Probleme mit Snapshot-Downloads für eines der Repositories. Downloads blieben selbst bei Update Police nie hängen. Jetzt werden Schnappschüsse nicht heruntergeladen, was genau das war, was ich wollte.
– Wolfrom
24. August 2017 um 19:16 Uhr
Reicher Verkäufer
Update: Ich hätte wahrscheinlich damit anfangen sollen, da Ihre Projekte SNAPSHOTs sind. Es ist Teil der SNAPSHOT-Semantik, dass Maven bei jedem Build nach Updates sucht. Ein SNAPSHOT zu sein bedeutet, dass es flüchtig ist und sich ändern kann, daher sollte nach Updates gesucht werden. Es ist jedoch erwähnenswert, dass die Maven super POM konfiguriert Central so, dass Snapshots deaktiviert sind, daher sollte Maven niemals nach Updates für SNAPSHOTs auf Central suchen, es sei denn, Sie haben dies in Ihren eigenen pom/settings überschrieben.
Sie können Maven für die Verwendung von a konfigurieren Spiegel für das zentrale Repository werden alle Anfragen, die normalerweise an das zentrale Repository gehen würden, an Ihr internes Repository umgeleitet.
In Ihrer settings.xml würden Sie so etwas hinzufügen, um Ihr internes Repository als Spiegel für die Zentrale festzulegen:
Wenn Sie einen Repository-Manager wie z Verknüpfung für Ihr internes Repository. Sie können eine einrichten Proxy-Repository für Proxy Central, sodass alle Anfragen, die normalerweise an Central gehen würden, stattdessen an Ihr Proxy-Repository (oder a Repository-Gruppe enthält den Proxy), und nachfolgende Anfragen werden im internen Repository-Manager zwischengespeichert. Sie können sogar das Proxy-Cache-Timeout auf -1 setzen, sodass niemals Inhalte von Central angefordert werden, die sich bereits im Proxy-Repository befinden.
Eine einfachere Lösung, wenn Sie nur mit lokalen Repositories arbeiten, besteht darin, die updatePolicy für das zentrale Repository auf “nie”, bedeutet dies, dass Maven immer nur nach Artefakten sucht, die sich nicht bereits im lokalen Repository befinden. Dies kann dann bei Bedarf in der Befehlszeile überschrieben werden, indem Sie den Schalter -U verwenden, um Maven zu zwingen, nach Updates zu suchen.
Sie würden das Repository (in Ihrem Pom oder einem Profil in der settings.xml) wie folgt konfigurieren:
Das Festlegen der updatePolicy auf “nie” hat nicht funktioniert. Das Entfernen dieser Repos war die Art und Weise, wie ich es gelöst habe. ps: Ich habe das verfolgt Lernprogramm über Webdienste (übrigens wahrscheinlich das beste Tutorial für ws für Java)
13354800cookie-checkWie kann ich Maven dazu bringen, den Versuch zu stoppen, nach Updates für Artefakte einer bestimmten Gruppe von maven-central-repo zu suchen?yes