Wie konfiguriere ich Maven für die Offline-Entwicklung?
117
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?
Haben Sie eine Maschine mit Internetzugang? Vielleicht ein Server?
Marcelo
2
Wir tun es, aber es ist gut, mühsam, Dinge von dort in die Entwicklungsumgebung zu bringen.
Antworten:
163
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-offlinekönnen Sie damit sicherstellen, dass alle Ihre Abhängigkeiten lokal installiert sind, bevor Sie offline arbeiten.
In Übereinstimmung mit dieser Antwort entdeckte ich, dass mvn mit seinen "Kern" -Plugins (dh Compiler) geliefert wird. So kann ich mit mvn install bekommen, was ich brauche.
8
Bedenken Sie auch, dass Sie "mvn dependency: go-offline" verwenden können, um sicherzustellen, dass alle in Ihrer pom.xml genannten Abhängigkeiten in Ihrem lokalen Repository vorhanden sind.
Thorbjørn Ravn Andersen
10
Leider fängt mvn dependency:go-offlineeinfach 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 .
Phs
2
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: Siehe die Lösung, die ich hier gefunden habe: stackoverflow.com/q/43661755/1767316
user1767316
Wenn Sie das Flag -llr zusätzlich zu -o hinzufügen, sollte es funktionieren.
Udo
10
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.xmlin den Entwicklungsmaschinen ändern :
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.
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-offlinehat 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.xmlDatei mit <localRepository>...</localRepository>oder durch Ausführen mvnmit 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 .
Das scheint eher für Abhängigkeiten und Plugins wie die Plugins Jetty, Tomcat usw. zu sein. Ich bin mehr besorgt über die internen Maven-Plugins wie Maven-Compiler-Plugin
1
@predhme: Dieser Ansatz funktioniert für alle Plugins, da alle diese in das Maven-Repository auf Ihrem lokalen Computer gehen
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-repositoryOption maven anstelle der Option -o(offline) und die Verwendung des lokalen Repositorys anstelle des Verteilungsrepositorys
Außerdem musste ich alle maven-metadata-maven2_central.xmlDateien des Local-Repo in die maven-metadata.xmlvon Maven erwartete Form kopieren.
Sehen Sie die Lösung, die ich hier gefunden habe .
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.
Es ist, aber nicht als Maven-Projekt (Ameise). Ich habe also alle Bibliotheken, die ich brauche, habe mich aber speziell über die internen Bibliotheken von Maven gewundert. Wie zum Beispiel Maven-Plugin-Compiler.
Wenn Sie alle von Ant verwalteten Abhängigkeiten haben, fehlen Ihnen wahrscheinlich ohnehin Maven-Metadaten, sodass Maven sie nicht aufnimmt. "Maven internal libs" können nur heruntergeladen werden, indem Sie Ihre POM-Struktur erstellen und auf einem mit dem Internet verbundenen Computer ausführen. Mit "run it" meine ich die Ausführung jedes Ziels, von dem Sie glauben, dass Sie es verwenden werden, nicht unbedingt nur "mvn clean install".
MaDa
0
In Vorbereitung vor dem Offline-Arbeiten einfach ausführen
mvn dependency:go-offline
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).
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.quelle
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.
Nach dem Einrichten von Artifactory müssen Sie nur noch Mavens
settings.xml
in den Entwicklungsmaschinen ändern :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.
quelle
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
2.) Verwenden Sie das Tag -o für den Offline-Befehl.
quelle
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).
quelle
Die Problemumgehung bestand darin, einen lokalen Repository-Speicherort anzugeben , entweder innerhalb einer
settings.xml
Datei mit<localRepository>...</localRepository>
oder durch Ausführenmvn
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 ...
).quelle
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.
quelle
Wenn Sie IntelliJ verwenden, können Sie einfach zu Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Build-Tools -> Maven gehen und Offline arbeiten aktivieren / deaktivieren .
quelle
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.
Wenn nicht, müssen Sie möglicherweise einen lokalen Server, z. B. Apache, auf Ihren Computern ausführen.
quelle
(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.
quelle
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 VerteilungsrepositorysAußerdem musste ich alle
maven-metadata-maven2_central.xml
Dateien des Local-Repo in diemaven-metadata.xml
von Maven erwartete Form kopieren.Sehen Sie die Lösung, die ich hier gefunden habe .
quelle
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.
quelle
In Vorbereitung vor dem Offline-Arbeiten einfach ausführen
mvn dependency:go-offline
quelle
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).quelle
zu
Ändern Sie das Offline-Tag von false in true.
wird von repo online heruntergeladen
quelle