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 möglicherweise zehn Anwendungen, die sie verwenden, aufgeteilt sind. Alle diese Elemente befinden sich im Namespace com.mycompany.*
.
Die meiste Zeit laufen wir gegen Snapshot-Builds. Um eine vollständige Erstellung einer Anwendung durchzuführen, kann ich zunächst 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 die Anwendungen erstelle. Aus irgendeinem Grund möchte Maven die beiden wichtigsten öffentlichen Repositorys (maven-net-repo und java-net-repo) auf Aktualisierungen für alle mycompany-*-SNAPSHOT.jar
Artefakte überprüfen . Natürlich werden sie dort nicht gefunden und alles wird schließlich auf die Versionen zurückgeführt, 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 die ständige Überprüfung dieser Repositorys auf Dinge, die niemals vorhanden sein werden, und (b) es fügt meinem Erstellungsprozess 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 Repositorys für Artefakte sucht, die bestimmte Kriterien erfüllen. In diesem Fall würde ich mich freuen, wenn Maven entweder SNAPSHOT-Versionen oder Artefakte, die sich darin befinden, ignorieren würde der com.mycompany
Namespace.
quelle
Sie können auch
-o
oder--offline
in der mvn-Befehlszeile verwenden, wodurch maven in den "Offline-Modus" versetzt wird, sodass nicht nach Updates gesucht wird. Sie erhalten eine Warnung, dass Abhängigkeiten nicht bereits in Ihrem lokalen Repo abgerufen werden können, aber keine große Sache.quelle
Etwas, das jetzt auch in Maven verfügbar ist, ist
oder kurz gesagt
quelle
set offline := true
in der Sitzung oderoffline := true
inbuild.sbt
.nsu
Option in Version 3.0.3 nicht verfügbar (siehe MNG-5064 ). Um diese Option zuverlässig zu nutzen, müssen Sie möglicherweise ein Upgrade auf mindestens Version 3.0.4 oder Version 3.0.5Update: Ich hätte wahrscheinlich damit beginnen 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 er volatil ist und Änderungen unterworfen ist. Daher sollten Aktualisierungen überprüft werden. Es ist jedoch erwähnenswert, dass das Maven Super POM Central so konfiguriert, dass Snapshots deaktiviert sind. Daher sollte Maven niemals nach Updates für SNAPSHOTs in Central suchen, es sei denn, Sie haben dies in Ihren eigenen POM / Einstellungen überschrieben.
Sie können Maven so konfigurieren, dass ein Spiegel für das zentrale Repository verwendet wird. Dadurch werden alle Anforderungen, die normalerweise an das zentrale Repository gesendet werden, an Ihr internes Repository umgeleitet.
In Ihrer settings.xml würden Sie so etwas hinzufügen, um Ihr internes Repository als Spiegel für Central festzulegen:
Wenn Sie einen Repository-Manager wie Nexus für Ihr internes Repository verwenden. Sie können ein Proxy-Repository für Proxy Central einrichten , sodass alle Anforderungen, die normalerweise an Central gesendet werden, stattdessen an Ihr Proxy-Repository (oder eine Repository-Gruppe, die den Proxy enthält) gesendet werden und nachfolgende Anforderungen im internen Repository-Manager zwischengespeichert werden. Sie können das Zeitlimit für den Proxy-Cache sogar auf -1 setzen, sodass niemals Inhalte von der Zentrale angefordert werden, die sich bereits im Proxy-Repository befinden.
Eine grundlegendere Lösung, wenn Sie nur mit lokalen Repositorys arbeiten, besteht darin, die updatePolicy für das zentrale Repository auf "nie" zu setzen. Dies bedeutet, dass Maven immer nur nach Artefakten sucht , die nicht bereits im lokalen Repository vorhanden sind. Dies kann dann bei Bedarf in der Befehlszeile überschrieben werden, indem der Schalter -U verwendet wird, 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:
quelle
updatePolicy
Element steht unter dem Elementsnapshots
oderreleases
. Siehe: maven.apache.org/settings.htmlSehr einfach :
Verwenden Sie in Ihrem übergeordneten Super POM oder in der Datei settings.xml
Das sind meine Tipps
quelle
Ich hatte ähnliche Probleme,
Das Setzen von updatePolicy auf "nie" hat nicht funktioniert. Das Entfernen dieses Repos war die Art und Weise, wie ich es gelöst habe. ps: Ich habe dieses Tutorial über Webdienste verfolgt (übrigens wahrscheinlich das beste Tutorial für ws für Java)
quelle