Czy Maven wymaga w pewnym momencie połączenia z Internetem, aby móc z niego korzystać? Czy chodzi konkretnie o uzyskanie wewnętrznych wtyczek Maven do kompilowania, czyszczenia, pakowania itp.?
Czy Maven wymaga w pewnym momencie połączenia z Internetem, aby móc z niego korzystać? Czy chodzi konkretnie o uzyskanie wewnętrznych wtyczek Maven do kompilowania, czyszczenia, pakowania itp.?
Odpowiedzi:
Możesz uruchomić maven w trybie offline mvn -o install
. Oczywiście wszelkie artefakty niedostępne w lokalnym repozytorium zawiodą. Maven nie jest oparty na repozytoriach rozproszonych, ale z pewnością ułatwiają pracę. Z tego powodu wiele sklepów korzysta z wewnętrznych serwerów lustrzanych, które są stopniowo synchronizowane z centralnymi repozytoriami.
Ponadto mvn dependency:go-offline
można użyć, aby upewnić się, że wszystkie zależności są zainstalowane lokalnie, zanim zaczniesz pracować w trybie offline.
mvn dependency:go-offline
po prostu nie łapie wszystkiego. Na przykład w nowej maszynie wirtualnej mój projekt nadal musi pobierać rzeczy, nawet po uruchomieniu tego celu. Zobacz także to wydanie .
Jeśli masz komputer z dostępem do Internetu w swojej sieci LAN, powinieneś zainstalować lokalne repozytorium Maven.
Polecam Artifactory Open Source . To jest to, czego używamy w naszej organizacji, jest naprawdę łatwe w konfiguracji.
Artifactory działa jako proxy między twoim narzędziem do budowania (Maven, Ant, Ivy, Gradle itp.) A światem zewnętrznym.
Buforuje zdalne artefakty, dzięki czemu nie musisz ich pobierać w kółko.
Blokuje niepożądane (a czasem wrażliwe na bezpieczeństwo) zewnętrzne żądania dotyczące wewnętrznych artefaktów i kontroluje, w jaki sposób i gdzie artefakty są wdrażane oraz przez kogo.
Po skonfigurowaniu Artifactory wystarczy zmienić Mavena settings.xml
w maszynach deweloperskich:
<?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>
Skorzystaliśmy z tego rozwiązania, ponieważ mieliśmy problemy z dostępem do Internetu na naszych maszynach programistycznych i niektóre artefakty pobierały uszkodzone pliki lub w ogóle ich nie pobierały. Od tamtej pory nie mieliśmy problemów.
Masz na to dwie możliwości:
1.) wprowadź zmiany w settings.xml dodaj to w pierwszym tagu
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.) użyj tagu -o dla polecenia offline.
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven potrzebuje zależności w lokalnym repozytorium. Najłatwiej je zdobyć, korzystając z dostępu do internetu (lub trudniej, korzystając z innych rozwiązań przedstawionych tutaj).
Zakładając więc, że możesz tymczasowo uzyskać dostęp do Internetu, możesz przygotować się do przejścia w tryb offline za pomocą wtyczki maven-dependency-plugin z jej zależnością: cel przejścia w tryb offline . Spowoduje to pobranie wszystkich zależności projektu do lokalnego repozytorium (oczywiście zmiany w zależnościach / wtyczkach będą wymagać nowego dostępu do Internetu / centralnego repozytorium).
Niestety
dependency:go-offline
nie zadziałało, ponieważ nie zapisał wszystkiego w pamięci podręcznej, tj. Pliki POMs i inne niejawnie wspominają o zależnościach.
Obejście polega na określeniu lokalizacji lokalnego repozytorium , w settings.xml
pliku z parametrem <localRepository>...</localRepository>
lub przez uruchomienie mvn
z -Dmaven.repo.local=...
parametrem. Po początkowej kompilacji projektu wszystkie niezbędne artefakty powinny zostać zapisane w pamięci podręcznej, a następnie można odwoływać się do lokalizacji repozytorium w ten sam sposób, podczas uruchamiania kompilacji Maven w trybie offline ( mvn -o ...
).
Przed przejściem do trybu offline musisz upewnić się, że wszystko znajduje się w lokalnym repozytorium, co jest wymagane podczas pracy w trybie offline. Uruchomienie "zależności mvn: go-offline" dla projektu (ów) / pom (ów), nad którymi zamierzasz pracować, zmniejszy wysiłki zmierzające do osiągnięcia tego.
Ale zwykle nie jest to cała historia, ponieważ zależność: go-offline pobierze tylko wtyczki "gołej kompilacji" ( go-offline / solution-plugins nie rozwiązuje wszystkich zależności wtyczek ). Musisz więc znaleźć sposób na pobranie wtyczek do wdrażania / testowania / witryny (i być może innych) i ich zależności do repozytorium.
Ponadto zależność: go-offline nie pobiera samego artefaktu pom, więc musisz się uzależnić: skopiuj go, jeśli to konieczne.
Czasami - jak napisał MaDa - nie wiesz, czego będziesz potrzebować będąc offline, co praktycznie uniemożliwia posiadanie „wystarczającego” repozytorium.
W każdym razie, mając prawidłowo wypełnione repozytorium, wystarczy dodać „<offline> true </offline>” do settings.xml Mavena, aby przejść do trybu offline.
Nie zmieniaj profilu (identyfikatora) Mavena, którego użyłeś do wypełnienia repozytorium, będąc offline. Maven rozpoznaje pobrane artefakty w swoich metadanych za pomocą „tożsamości”, która jest powiązana z identyfikatorem profilu.
Jeśli używasz IntelliJ, możesz po prostu przejść do Preferencje -> Kompilacja, wykonanie, wdrażanie -> Narzędzia kompilacji -> Maven i zaznaczyć / odznaczyć Pracuj offline .
Czy to działa dla Ciebie?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
Nie zapomnij dodać go do repozytorium wtyczek i wskaż adres URL, gdziekolwiek jest twoje repozytorium.
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
Jeśli nie, być może będziesz musiał uruchomić lokalny serwer, np. Apache, na swoich maszynach.
(źródło: jfrog.com )
lub
Po prostu użyj serwerów repozytorium Maven, takich jak Sonatype Nexus http://www.sonatype.org/nexus/ lub JFrog Artifactory https://www.jfrog.com/artifactory/ .
Gdy jeden programista zbuduje projekt, kompilacja przez kolejnych programistów lub Jenkins CI nie będzie wymagać dostępu do Internetu.
Serwer repozytorium Maven może również mieć skonfigurowane serwery proxy, aby uzyskać dostęp do Maven Central (lub bardziej potrzebnych repozytoriów publicznych), a także mogą mieć zinchowaną listę artefaktów w zdalnych repozytoriach.
Z mojego doświadczenia wynika, że opcja -o nie działa poprawnie, a cel przejścia w tryb offline jest daleki od wystarczającego, aby umożliwić pełną kompilację offline:
Rozwiązanie, które mógłbym zweryfikować, obejmuje użycie --legacy-local-repository
opcji Maven zamiast -o
(offline) oraz użycie lokalnego repozytorium zamiast repozytorium dystrybucji
Dodatkowo musiałem skopiować wszystkie maven-metadata-maven2_central.xml
pliki lokalnego repozytorium do maven-metadata.xml
postaci oczekiwanej przez mavena.
Zobacz rozwiązanie, które znalazłem tutaj .
Odpowiadając bezpośrednio na Twoje pytanie: nie wymaga połączenia internetowego, ale dostępu do repozytorium, w sieci LAN lub na dysku lokalnym (skorzystaj ze wskazówek innych osób, które tutaj pisały).
Jeśli twój projekt nie jest w fazie dojrzałej, oznacza to, że gdy POM są często zmieniane, tryb offline będzie bardzo niepraktyczny, ponieważ będziesz musiał dość często aktualizować repozytorium. Chyba że możesz zdobyć kopię repozytorium, które ma wszystko, czego potrzebujesz, ale skąd możesz to wiedzieć? Zazwyczaj repozytorium uruchamiasz od zera i jest ono klonowane stopniowo podczas tworzenia (na komputerze podłączonym do innego repozytorium). Kopia repozytorium publicznego repo1.maven.org waży setki gigabajtów, więc też nie polecałbym brutalnej siły.
Pojawiła się nowa wtyczka, która naprawia niedociągnięcia mvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
Dodaj go do pom, a następnie biegnij mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
. Po skonfigurowaniu wszystkich zależności dynamicznych maven nie będzie próbować niczego więcej pobierać (dopóki nie zaktualizujesz wersji).
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
do
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
Zmień tag offline z false na true.
pobierze z repozytorium online