Benötigt Maven irgendwann eine Verbindung zum Internet, um es nutzen zu können? Bedeutet das, speziell die internen Maven-Plugins zum Kompilieren, Reinigen, Verpacken usw. zu erhalten?
Benötigt Maven irgendwann eine Verbindung zum Internet, um es nutzen zu können? Bedeutet das, speziell die internen Maven-Plugins zum Kompilieren, Reinigen, Verpacken usw. zu erhalten?
Antworten:
Sie können maven im Offline-Modus ausführen mvn -o install
. Natürlich schlagen alle Artefakte fehl, die in Ihrem lokalen Repository nicht verfügbar sind. Maven basiert nicht auf verteilten Repositorys, aber sie machen die Dinge sicherlich nahtloser. Aus diesem Grund verwenden viele Geschäfte interne Spiegel, die schrittweise mit den zentralen Repos synchronisiert werden.
Darüber hinaus mvn dependency:go-offline
können Sie damit sicherstellen, dass alle Ihre Abhängigkeiten lokal installiert sind, bevor Sie offline arbeiten.
mvn dependency:go-offline
einfach nicht alles. In einer neuen virtuellen Maschine zum Beispiel muss mein Projekt auch nach dem Ausführen dieses Ziels noch Dinge herunterladen. Siehe auch dieses Problem .
Wenn Sie einen PC mit Internetzugang in Ihrem LAN haben, sollten Sie ein lokales Maven-Repository installieren.
Ich empfehle Artifactory Open Source . Dies ist, was wir in unserer Organisation verwenden, es ist wirklich einfach einzurichten.
Artifactory fungiert als Proxy zwischen Ihrem Build-Tool (Maven, Ant, Ivy, Gradle usw.) und der Außenwelt.
Remote-Artefakte werden zwischengespeichert, sodass Sie sie nicht immer wieder herunterladen müssen.
Es blockiert unerwünschte (und manchmal sicherheitsrelevante) externe Anforderungen für interne Artefakte und steuert, wie und wo Artefakte bereitgestellt werden und von wem.
Nach dem Einrichten von Artifactory müssen Sie nur noch Mavens settings.xml
in den Entwicklungsmaschinen ändern :
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mirrors>
<mirror>
<mirrorOf>*</mirrorOf>
<name>repo</name>
<url>http://maven.yourorganization.com:8081/artifactory/repo</url>
<id>repo</id>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
Wir haben diese Lösung verwendet, weil wir Probleme mit dem Internetzugang in unseren Entwicklungsmaschinen hatten und einige Artefakte beschädigte Dateien heruntergeladen oder überhaupt nicht heruntergeladen haben. Wir hatten seitdem keine Probleme mehr.
Hierfür haben Sie zwei Möglichkeiten:
1.) Nehmen Sie Änderungen in der settings.xml vor und fügen Sie diese im ersten Tag hinzu
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.) Verwenden Sie das Tag -o für den Offline-Befehl.
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven benötigt die Abhängigkeiten in Ihrem lokalen Repository. Der einfachste Weg, sie zu erhalten, ist der Internetzugang (oder schwieriger, andere hier bereitgestellte Lösungen zu verwenden).
Angenommen , Sie können vorübergehend einen Internetzugang erhalten, können Sie sich darauf vorbereiten, mit dem Maven-Dependency-Plugin mit seiner Abhängigkeit: Go-Offline- Ziel offline zu gehen . Dadurch werden alle Ihre Projektabhängigkeiten in Ihr lokales Repository heruntergeladen (Änderungen an den Abhängigkeiten / Plugins erfordern natürlich einen neuen Zugriff auf das Internet / das zentrale Repository).
Leider
dependency:go-offline
hat es bei mir nicht funktioniert, da es nicht alles zwischengespeichert hat, dh. POMs-Dateien und andere erwähnen implizit Abhängigkeiten.
Die Problemumgehung bestand darin, einen lokalen Repository-Speicherort anzugeben , entweder innerhalb einer settings.xml
Datei mit <localRepository>...</localRepository>
oder durch Ausführen mvn
mit einem -Dmaven.repo.local=...
Parameter. Nach der ersten Projekterstellung sollten alle erforderlichen Artefakte zwischengespeichert werden. Anschließend können Sie den Repository-Speicherort auf die gleiche Weise referenzieren, während Sie die Maven-Erstellung im Offline-Modus ausführen ( mvn -o ...
).
Bevor Sie offline gehen, müssen Sie sicherstellen, dass sich alles in Ihrem lokalen Repo befindet, was für die Offline-Arbeit erforderlich ist. Wenn Sie "mvn dependency: go-offline" für die Projekte / pom (s) ausführen, an denen Sie arbeiten möchten, wird der Aufwand dafür verringert.
Aber es ist normalerweise nicht die ganze Geschichte, denn Abhängigkeit: go-offline lädt nur die "Bare Build" -Plugins herunter ( go-offline / resolve-plugins löst nicht alle Plugin-Abhängigkeiten auf ). Sie müssen also einen Weg finden, um Deploy / Test / Site-Plugins (und möglicherweise andere) und deren Abhängigkeiten in Ihr Repo herunterzuladen.
Abhängigkeit: go-offline lädt das Artefakt des pom selbst nicht herunter, daher müssen Sie abhängig sein: Kopieren Sie es bei Bedarf.
Manchmal - wie MaDa schrieb - wissen Sie nicht, was Sie brauchen, wenn Sie offline sind, was es ziemlich unmöglich macht, ein "ausreichendes" Repo zu haben.
Wenn Sie ein ordnungsgemäß gefülltes Repo haben, müssen Sie nur "<offline> true </ offline>" zu Mavens settings.xml hinzufügen, um offline zu gehen.
Ändern Sie nicht das Maven-Profil (ID), mit dem Sie Ihr Repo gefüllt haben, während Sie offline sind. Maven erkennt die heruntergeladenen Artefakte in seinen Metadaten mit einer "Identität", die an die Profil-ID gebunden ist.
Wenn Sie IntelliJ verwenden, können Sie einfach zu Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Build-Tools -> Maven gehen und Offline arbeiten aktivieren / deaktivieren .
Geht das für dich?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
Vergessen Sie nicht, es Ihrem Plugin-Repository hinzuzufügen und die URL auf die Stelle zu verweisen, an der sich Ihr Repository befindet.
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
Wenn nicht, müssen Sie möglicherweise einen lokalen Server, z. B. Apache, auf Ihren Computern ausführen.
(Quelle: jfrog.com )
oder
Verwenden Sie einfach Maven-Repository-Server wie Sonatype Nexus http://www.sonatype.org/nexus/ oder JFrog Artifactory https://www.jfrog.com/artifactory/ .
Nachdem ein Entwickler ein Projekt erstellt hat, erfordert die Erstellung durch die nächsten Entwickler oder Jenkins CI keinen Internetzugang.
Auf dem Maven-Repository-Server können auch Proxys konfiguriert sein, die auf Maven Central (oder mehr benötigte öffentliche Repositorys) zugreifen, und sie können eine Liste von Artefakten in Remote-Repositorys synchronisieren.
Meine Erfahrung zeigt, dass die Option -o nicht richtig funktioniert und dass das Go-Offline-Ziel bei weitem nicht ausreicht, um einen vollständigen Offline-Build zu ermöglichen:
Die Lösung, die ich validieren konnte, umfasst die Verwendung der --legacy-local-repository
Option maven anstelle der Option -o
(offline) und die Verwendung des lokalen Repositorys anstelle des Verteilungsrepositorys
Außerdem musste ich alle maven-metadata-maven2_central.xml
Dateien des Local-Repo in die maven-metadata.xml
von Maven erwartete Form kopieren.
Direkte Beantwortung Ihrer Frage: Es ist keine Internetverbindung erforderlich, sondern der Zugriff auf ein Repository im LAN oder auf der lokalen Festplatte (verwenden Sie Hinweise von anderen Personen, die hier gepostet haben).
Wenn sich Ihr Projekt nicht in einer ausgereiften Phase befindet, dh wenn POMs häufig geändert werden, ist der Offline-Modus sehr unpraktisch, da Sie Ihr Repository auch häufig aktualisieren müssen. Es sei denn, Sie können eine Kopie eines Repositorys erhalten, das alles enthält, was Sie benötigen. Aber woher wissen Sie das? Normalerweise starten Sie ein Repository von Grund auf neu und es wird während der Entwicklung schrittweise geklont (auf einem Computer, der mit einem anderen Repository verbunden ist). Eine Kopie des öffentlichen Repositorys repo1.maven.org wiegt Hunderte von Gigabyte, daher würde ich Brute Force auch nicht empfehlen.
Ein neues Plugin hat anscheinend folgende Mängel behoben mvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
Fügen Sie es Ihrem Pom hinzu und führen Sie es aus mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
. Sobald Sie alle dynamischen Abhängigkeiten eingerichtet haben, wird maven nicht mehr versuchen, etwas erneut herunterzuladen (bis Sie die Versionen aktualisieren).
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
zu
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
Ändern Sie das Offline-Tag von false in true.
wird von repo online heruntergeladen