wake-up-neo.com

Wie kann ich Maven zwingen, mein lokales Repository zu verwenden, anstatt zu Remote-Repos zu wechseln, um Artefakte abzurufen?

Ich verwende Maven 3.3.3 mit Java 8 auf Mac Yosemite. Ich habe ein Projekt mit mehreren Modulen.

    <modules>
            <module>first-module</module>
            <module>my-module</module>
                …
    </modules>

Wenn ich eines meiner untergeordneten Module, z. B. "my-module" von oben mithilfe von "mvn clean install", erstelle, versucht der Build, die untergeordneten Modulartefakte von einem Remote-Repository herunterzuladen, das ich in meinem ~/.m2 definiert habe /settings.xml Datei. Ausgang 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 kann ich Maven zwingen, zuerst mein lokales ~/.m2/-repository zu überprüfen, bevor ich versuche, es von den Remote-Repositorys herunterzuladen? Im Folgenden sind 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 stattfindet, wenn das Artefakt nicht vorhanden ist, sehen Sie unten die Terminalausgabe, in der ich nachweise, 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
67
Dave

Die Abhängigkeit hat eine Snapshot-Version. Bei Snapshots überprüft Maven das lokale Repository. Wenn das im lokalen Repository gefundene Artefakt zu alt ist, wird versucht, ein aktualisiertes in den Remote-Repositorys zu finden. Das sehen Sie wahrscheinlich.

Beachten Sie, dass dieses Verhalten durch die Anweisung updatePolicy in der Repository-Konfiguration gesteuert wird (bei Snapshot-Repositorys standardmäßig daily).

33
Andreas Veithen

Verwenden mvn --help und Sie können die Optionsliste sehen.

Es gibt eine Option wie -nsu,--no-snapshot-updates Suppress SNAPSHOT updates

Also benutze den Befehl mvn install -nsu kann das Kompilieren mit dem lokalen Repository erzwingen.

21
Zheng Zhongqi

Um wirklich erzwingen maven zu nur Ihr lokales Repo zu verwenden, können Sie mit mvn <goals> -o. Das -o weist maven an, Sie "offline" arbeiten zu lassen, und es bleibt außerhalb des Netzwerks.

5
Sean

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:

<dependencyManagement>
    <dependency>
        <groupId>org.thirdparty</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

Zu:

<dependencyManagement>
   <dependency>
      <groupId>org.thirdparty.module</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

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.

3
Willa

Die 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 das erste Mal ist, je nach dem Fehler, den ich erhalte.

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.

[~ # ~] Update [~ # ~]

Ich habe gerade die Abhängigkeit wiederhergestellt und musste sie erneut importieren: die reguläre mvn clean install hat mir nicht gereicht

2
Luigi Cristalli

Befolgen Sie die folgenden Schritte:
1.Stellen Sie sicher, dass Sie den gesamten Inhalt des JAR-Ordners in Ihrem lokalen Ordner mit Ausnahme des JAR-Ordners löschen, den Sie behalten möchten.
Zum Beispiel Dateien wie .repositorys, .pom, .sha1, .lastUpdated usw.

2. Führen Sie den Befehl mvn clean install -o aus

Dies hilft, lokale Repository-JAR-Dateien zu verwenden, anstatt eine Verbindung zu einem Repository herzustellen.

0
Madhu