Maven-Repository
In der Maven-Terminologie ist ein Repository ein Ort.
Ein Maven-Repository enthält die Bibliotheken von Drittanbietern, von denen ein Projekt abhängt; der Ort, an dem diese Bibliotheken gespeichert sind, wird als Repository bezeichnet.
In Maven kann jede Abhängigkeit, jedes Plugin oder jede Ausgabe eines Projekt-Builds als Artefakt bezeichnet werden.
Maven-Repositories helfen uns, Artefakte (hauptsächlich JARs) zu verwalten; sie sind der Ort, an dem alle JAR-Dateien (WAR, ZIP, POM usw.) gespeichert werden.
Maven-Repository-Typen:
| Repository-Typ | Speicherort | Zweck | Zugriffspriorität |
|---|---|---|---|
| Lokales Repository | Unter dem Home-Verzeichnis des Benutzers.m2/repository | Von Remote-Repositories heruntergeladene Abhängigkeiten zwischenspeichern | 1 |
| Remote-Repository | Netzwerkserver | Zentralen Speicher für Abhängigkeiten und Plugins bereitstellen | 2 |
| - Zentrales Repository | repo.maven.apache.org | Das vom Maven-Team gepflegte Standard-Repository | 2.1 |
| - Privates Server-Repository | Wird innerhalb eines Unternehmens eingerichtet (z. B. Nexus) | Private Abhängigkeiten hosten und Builds beschleunigen | 2.2 |
| - Andere öffentliche Repositories | Wie z. B. Aliyun, JCenter usw. | Das Central Repository spiegeln oder ergänzen | 2.3 |
Lokales Repository
Das lokale Repository von Maven wird nicht nach der Installation von Maven erstellt; es wird erstellt, wenn der erste Maven-Befehl ausgeführt wird.
Beim Ausführen von Maven werden alle Artefakte, die Maven benötigt, direkt aus dem lokalen Repository abgerufen. Wenn das lokale Repository sie nicht enthält, wird zuerst versucht, die Artefakte von einem Remote-Repository in das lokale Repository herunterzuladen, und dann werden die Artefakte aus dem lokalen Repository verwendet.
Standardmäßig hat jeder Benutzer, ob unter Linux oder Windows, ein Repository-Verzeichnis namens .m2/repository/ in seinem Home-Verzeichnis.
Windows:
C:\Users\<用户名>\.m2\repositoryLinux/macOS:
~/.m2/repository
Das lokale Maven-Repository wird standardmäßig unter %USER_HOME% erstellt. Um den Standardspeicherort zu ändern, definieren Sie einen anderen Pfad in der Datei settings.xml im Verzeichnis %M2_HOME%\conf.
Wenn Sie einen Maven-Befehl ausführen, lädt Maven die Abhängigkeitsdateien in den von Ihnen angegebenen Pfad herunter.
Lokales Repository bereinigen:
mvn dependency:purge-local-repository # 或手动删除~/.m2/repository目录
Zentrales Repository
Das Maven Central Repository ist ein von der Maven-Community bereitgestelltes Repository und enthält eine große Anzahl häufig verwendeter Bibliotheken.
Das zentrale Repository enthält die beliebtesten Open-Source-Java-Artefakte sowie Quellcode, Autoreninformationen, SCM-Informationen, Lizenzinformationen usw. Im Allgemeinen können hier Artefakte heruntergeladen werden, von denen einfache Java-Projekte abhängen.
Wichtige Konzepte des zentralen Repositorys:
- Dieses Repository wird von der Maven-Community verwaltet.
- Es ist keine Konfiguration erforderlich.
- Der Zugriff muss über das Netzwerk erfolgen.
Standardadresse des zentralen Repositorys (keine explizite Konfiguration erforderlich):https://repo.maven.apache.org/maven2/
Remote-Repository
Benutzerdefinierte Repository-Konfiguration
Wenn Maven die Abhängigkeitsdateien im zentralen Repository nicht finden kann, stoppt Maven den Build-Prozess und gibt eine Fehlermeldung auf der Konsole aus. Um dies zu vermeiden, bietet Maven das Konzept der Remote-Repositorys, bei denen es sich um benutzerdefinierte Repositorys handelt, die von Entwicklern definiert werden und die erforderlichen Codebibliotheken oder JAR-Dateien enthalten, die in anderen Projekten verwendet werden.
Zum Beispiel lädt Maven mit der folgenden pom.xml die in der pom.xml deklarierten Abhängigkeitsdateien (die im Central Repository nicht verfügbar sind) von einem Remote-Repository herunter.
Beispiel
<repository>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled> <!-- SNAPSHOT-Versionen deaktivieren -->
</snapshots>
</repository>
</repositories>
Mirror-Repository (Empfohlen)
In settings.xml konfigurieren:
Beispiel
<mirror>
<id>aliyun</id>
<name>Aliyun-Spiegel</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf> <!-- Überschreibe das zentrale Repository -->
</mirror>
</mirrors>
Maven Aliyun-Repository
Das standardmäßige Maven-Repository befindet sich im Ausland, daher ist es in China zwangsläufig langsam. Wir können zum Repository von Aliyun wechseln.
Ändern Sie die Datei settings.xml im Ordner conf unter dem Maven-Stammverzeichnis und fügen Sie den folgenden Inhalt zum mirrors-Knoten hinzu:
Wenn Sie andere Proxy-Repositories verwenden möchten, können Sie<repositories></repositories>die entsprechenden Repository-URLs im <repositories>-Knoten hinzufügen. Nehmen Sie das Spring-Proxy-Repository als Beispiel:
In Ihrer pom.xml-Datei können Sie<denpendencies></denpendencies>die Dateiinformationen hinzufügen, auf die Sie im <dependencies>-Knoten verweisen möchten:
Führen Sie den Abrufbefehl aus:
mvn install
Gradle-Konfigurationsanleitung
Fügen Sie den folgenden Code zur build.gradle-Datei hinzu:
Wenn Sie andere Proxy-Repositories verwenden möchten, nehmen Sie das Spring-Repository als Beispiel; der Code lautet wie folgt:
Fügen Sie die Dateiinformationen hinzu, auf die Sie verweisen möchten:
Führen Sie den folgenden Befehl aus, um die Abhängigkeiten zu installieren:
gradle dependencies oder ./gradlew dependencies
Privates Server-Repository
Repository-Typen:
| Repository-Typ | Zweck |
|---|---|
| gehostet | Private Artefakte speichern |
| proxy | Proxy-Remote-Repositories |
| group | Mehrere Repositories zusammenfassen |
Auf privatem Server veröffentlichen
In pom.xml konfigurieren:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://your-nexus/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://your-nexus/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
Authentifizierung in settings.xml konfigurieren:
<servers>
<server>
<id>nexus-releases</id>
<username>deploy-user</username>
<password>deploy-pwd</password>
</server>
</servers>Veröffentlichungsbefehl:
mvn deploy
Suchreihenfolge für Maven-Abhängigkeiten
Wenn wir einen Maven-Build-Befehl ausführen, sucht Maven Abhängigkeitsbibliotheken in der folgenden Reihenfolge:
- Schritt 1- Das lokale Repository durchsuchen. Wenn nicht gefunden, zu Schritt 2 gehen; wenn gefunden, mit anderen Vorgängen fortfahren.
- Schritt 2- Das zentrale Repository durchsuchen. Wenn es nicht gefunden wird und ein oder mehrere Remote-Repositories konfiguriert wurden, fahren Sie mit Schritt 4 fort; wenn es gefunden wird, laden Sie es zur späteren Verwendung in das lokale Repository herunter.
- Schritt 3- Wenn keine Remote-Repositories konfiguriert sind, stoppt Maven die Verarbeitung einfach und wirft einen Fehler aus (Abhängigkeitsdateien können nicht gefunden werden).
- Schritt 4- Suchen Sie nach den Abhängigkeitsdateien in einem oder mehreren Remote-Repositories. Wenn sie gefunden werden, laden Sie sie zur späteren Verwendung in das lokale Repository herunter; andernfalls stoppt Maven die Verarbeitung und wirft einen Fehler aus (Abhängigkeitsdateien können nicht gefunden werden).
Häufige Befehle
| Befehl | Zweck |
|---|---|
mvn dependency:resolve | Abhängigkeiten auflösen |
mvn dependency:tree | Abhängigkeitsbaum anzeigen |
mvn dependency:purge-local-repository | Lokales Repository bereinigen |
mvn deploy | In ein Remote-Repository veröffentlichen |
Häufige Probleme und Lösungen
1. Symptom: Fehler beim Herunterladen von Abhängigkeiten:Artefakt konnte nicht übertragen werden...
Lösung:- Netzwerkverbindung prüfen
- Überprüfen, ob die Repository-URL korrekt ist
- Firewall vorübergehend deaktivieren, um zu testen
2. Symptom: Authentifizierungsfehler:401 Unauthorized
Lösung:
- Die <server>-Konfiguration in settings.xml überprüfen
- Bestätigen, ob der Benutzername/das Passwort über Repository-Zugriffsberechtigungen verfügt
3. Abhängigkeitskonflikte
Fehlerbehebung:
mvn dependency:tree -Dverbose
Lösung: Version in <dependencyManagement> vereinheitlichen
Andere Erweiterungen