Ich verwende Maven 3.3.3 mit Java 8 auf Mac Yosemite. Ich habe ein Multi-Modul-Projekt.
<modules>
<module>first-module</module>
<module>my-module</module>
…
</modules>
Wenn ich eines meiner untergeordneten Module, z. B. "my-module" von oben, mit "mvn clean install" erstelle, versucht der Build, die Artefakte des untergeordneten Moduls aus einem Remote-Repository herunterzuladen, das ich in meinem ~ / .m2 definiert habe Datei /settings.xml. Die Ausgabe ist unten
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom
Wie zwinge ich Maven, zuerst mein lokales ~ / .m2 / Repository zu überprüfen, bevor ich versuche, es von den Remote-Repositorys herunterzuladen? Unten habe ich meine Remote-Repositorys in meiner Datei ~ / .m2 / settings.xml definiert.
<profile>
<id>releases</id>
<activation>
<property>
<name>!releases.off</name>
</property>
</activation>
<repositories>
<repository>
<id>releases</id>
<url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>snapshots</id>
<activation>
<property>
<name>!snapshots.off</name>
</property>
</activation>
<repositories>
<repository>
<id>snapshots</id>
<url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
Bearbeiten: Als Antwort auf die Antwort, dass der Download erfolgt, wenn das Artefakt nicht vorhanden ist, sehen Sie unten die Terminalausgabe, in der ich beweise, dass die Datei in meinem Repo vorhanden war, aber Maven versucht, sie trotzdem herunterzuladen ...
Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r-- 1 davea staff 10171 Nov 5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first- module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
settings.xml
(siehe hier ).Antworten:
Die Abhängigkeit hat eine Snapshot-Version. Für Snapshots überprüft Maven das lokale Repository. Wenn das im lokalen Repository gefundene Artefakt zu alt ist, versucht es, ein aktualisiertes in den Remote-Repositorys zu finden. Das sehen Sie wahrscheinlich.
Beachten Sie, dass dieses Verhalten von der
updatePolicy
Direktive in der Repository-Konfiguration gesteuert wird (daily
standardmäßig für Snapshot-Repositorys).quelle
Verwenden
mvn --help
Sie und Sie können die Optionsliste sehen.Es gibt eine Option wie
-nsu,--no-snapshot-updates Suppress SNAPSHOT updates
Der Befehl use
mvn install -nsu
kann also die Kompilierung mit dem lokalen Repository erzwingen.quelle
-o
für "offline" Maven Verhalten verwendenUm Maven wirklich zu zwingen , nur Ihr lokales Repo zu verwenden, können Sie mit laufen
mvn <goals> -o
. Der-o
sagt maven, dass Sie "offline" arbeiten sollen, und es bleibt außerhalb des Netzwerks.quelle
mvn dependency:go-offline
In meinem Fall hatte ich ein Multi-Modul-Projekt wie Sie. Ich musste eine Gruppen-ID einer der externen Bibliotheken ändern, von denen mein Projekt abhängig war (siehe unten).
Von:
Zu:
Beachten Sie den Abschnitt <groupId>. Es stellte sich heraus, dass ich vergessen hatte, den entsprechenden Abschnitt der Submodule, die diese Abhängigkeit definieren, in ihren POM-Dateien zu ändern.
Es hat mich sehr verrückt gemacht, weil das Modul lokal verfügbar war.
quelle
Befolgen Sie die folgenden Schritte:
Zum Beispiel Dateien wie .repositories, .pom, .sha1, .lastUpdated usw.
mvn clean install -o
Befehl ausführenDies hilft dabei, lokale Repository-JAR-Dateien zu verwenden, anstatt eine Verbindung zu einem Repository herzustellen.
quelle
*.repositories
und*.sha1
Dateien funktionierten für michDie Option -o hat bei mir nicht funktioniert, da sich das Artefakt noch in der Entwicklung befindet und noch nicht hochgeladen wurde und maven (3.5.x) weiterhin versucht, es aus dem Remote-Repository herunterzuladen, da es laut dem Fehler, den ich erhalte, das erste Mal ist.
Dies hat es jedoch für mich behoben: https://maven.apache.org/general.html#importing-jars
Nach dieser manuellen Installation muss auch die Offline-Option nicht mehr verwendet werden.
AKTUALISIEREN
Ich habe gerade die Abhängigkeit neu erstellt und musste sie erneut importieren: Die reguläre Abhängigkeit
mvn clean install
war für mich nicht ausreichendquelle
Maven überprüft immer zuerst Ihr lokales Repository. Ihre Abhängigkeit muss jedoch in Ihrem Repo installiert sein, damit Maven sie findet.
Führen
mvn install
Sie zuerst Ihr Abhängigkeitsmodul aus und erstellen Sie dann Ihr abhängiges Modul.quelle