Maven a-t-il besoin d'une connexion Internet à un moment donné pour pouvoir l'utiliser? Cela signifie obtenir spécifiquement les plugins internes maven pour la compilation, le nettoyage, l'emballage, etc.?
Maven a-t-il besoin d'une connexion Internet à un moment donné pour pouvoir l'utiliser? Cela signifie obtenir spécifiquement les plugins internes maven pour la compilation, le nettoyage, l'emballage, etc.?
Réponses:
Vous pouvez exécuter maven en mode hors ligne mvn -o install
. Bien entendu, tous les artefacts non disponibles dans votre référentiel local échoueront. Maven n'est pas basé sur des référentiels distribués, mais ils rendent certainement les choses plus transparentes. C'est pour cette raison que de nombreux magasins utilisent des miroirs internes qui sont progressivement synchronisés avec les dépôts centraux.
En outre, le mvn dependency:go-offline
peut être utilisé pour vous assurer que toutes vos dépendances sont installées localement avant de commencer à travailler hors ligne.
Si vous avez un PC avec accès Internet dans votre LAN, vous devez installer un référentiel Maven local.
Je recommande Artifactory Open Source . C'est ce que nous utilisons dans notre organisation, c'est vraiment facile à mettre en place.
Artifactory agit comme un proxy entre votre outil de construction (Maven, Ant, Ivy, Gradle, etc.) et le monde extérieur.
Il met en cache les artefacts distants afin que vous n'ayez pas à les télécharger encore et encore.
Il bloque les demandes externes indésirables (et parfois sensibles à la sécurité) d'artefacts internes et contrôle comment et où les artefacts sont déployés et par qui.
Après avoir configuré Artifactory, il vous suffit de changer les Maven settings.xml
dans les machines de développement:
<?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>
Nous avons utilisé cette solution parce que nous avions des problèmes d'accès à Internet dans nos machines de développement et que certains artefacts téléchargeaient des fichiers corrompus ou ne se téléchargeaient pas du tout. Nous n'avons pas eu de problèmes depuis.
Vous avez deux options pour cela:
1.) faites des changements dans le settings.xml ajoutez ceci dans la première balise
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.) utilisez la balise -o pour la commande hors ligne.
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven a besoin des dépendances dans votre référentiel local. Le moyen le plus simple de les obtenir est d'accéder à Internet (ou plus difficile d'utiliser d'autres solutions fournies ici).
Donc, en supposant que vous puissiez accéder temporairement à Internet, vous pouvez vous préparer à vous déconnecter en utilisant le plugin maven-dependency-plugin avec sa dépendance: l' objectif de passer hors ligne . Cela téléchargera toutes les dépendances de votre projet dans votre référentiel local (bien sûr, les changements dans les dépendances / plugins nécessiteront un nouvel accès Internet / au référentiel central).
Malheureusement, cela
dependency:go-offline
n'a pas fonctionné pour moi car il n'a pas tout mis en cache, c'est-à-dire. Les fichiers POM et autres mentionnent implicitement des dépendances.
La solution de contournement a été de spécifier un emplacement de référentiel local , soit dans le settings.xml
fichier avec, <localRepository>...</localRepository>
soit en s'exécutant mvn
avec un -Dmaven.repo.local=...
paramètre. Après la génération initiale du projet, tous les artefacts nécessaires doivent être mis en cache, puis vous pouvez référencer l'emplacement du référentiel de la même manière, tout en exécutant la génération Maven en mode hors connexion ( mvn -o ...
).
Avant de vous déconnecter, vous devez vous assurer que tout se trouve dans votre dépôt local, ce qui est nécessaire lorsque vous travaillez hors ligne. Lancer "mvn dependency: go-offline" pour le (s) projet (s) / pom (s) sur lequel (s) vous comptez travailler réduira les efforts pour y parvenir.
Mais ce n'est généralement pas toute l'histoire, parce que dependency: go-offline ne téléchargera que les plugins "bare build" ( go-offline / resolution-plugins ne résout pas toutes les dépendances de plugin ). Vous devez donc trouver un moyen de télécharger les plugins de déploiement / test / site (et peut-être d'autres) et leurs dépendances dans votre dépôt.
De plus, la dépendance: go-offline ne télécharge pas l'artefact de pom lui-même, donc vous devez la dépendance: copiez-le si nécessaire.
Parfois - comme l'a écrit MaDa - vous ne savez pas ce dont vous aurez besoin, tout en étant hors ligne, ce qui rend pratiquement impossible d'avoir un dépôt «suffisant».
Quoi qu'il en soit, ayant un dépôt correctement rempli, il vous suffit d'ajouter "<offline> true </offline>" au settings.xml de Maven pour vous déconnecter.
Ne modifiez pas le profil Maven (id) que vous avez utilisé pour remplir votre dépôt, tout en étant hors ligne. Maven reconnaît les artefacts téléchargés dans ses métadonnées avec une "identité", qui est liée à l'ID de profil.
Si vous utilisez IntelliJ, vous pouvez simplement aller dans Préférences -> Build, Execution, Deployment -> Build Tools -> Maven et cocher / décocher Travailler hors ligne .
Est-ce que ça marche pour toi?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
N'oubliez pas de l'ajouter à votre référentiel de plugins et pointez l'URL vers où se trouve votre référentiel.
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
Sinon, vous devrez peut-être exécuter un serveur local, par exemple apache, sur vos machines.
(source: jfrog.com )
ou
Utilisez simplement des serveurs de référentiel Maven comme Sonatype Nexus http://www.sonatype.org/nexus/ ou JFrog Artifactory https://www.jfrog.com/artifactory/ .
Une fois qu'un développeur a créé un projet, celui des prochains développeurs ou Jenkins CI ne nécessitera pas d'accès Internet.
Le serveur de référentiel Maven peut également avoir des proxys configurés pour accéder à Maven Central (ou à des référentiels publics plus nécessaires), et ils peuvent avoir une liste d'artefacts cynchée dans des référentiels distants.
Mon expérience montre que l'option -o ne fonctionne pas correctement et que l'objectif de mise hors ligne est loin d'être suffisant pour permettre une compilation complète hors ligne:
La solution que j'ai pu valider comprend l'utilisation de l' --legacy-local-repository
option maven plutôt que celle -o
(hors ligne) et l'utilisation du référentiel local à la place du référentiel de distribution
De plus, j'ai dû copier tous les maven-metadata-maven2_central.xml
fichiers du local-repo sous la maven-metadata.xml
forme attendue par maven.
Voir la solution que j'ai trouvée ici .
Répondre directement à votre question: cela ne nécessite pas de connexion Internet, mais l'accès à un référentiel, sur LAN ou disque local (utilisez les indices d'autres personnes qui ont posté ici).
Si votre projet n'est pas dans une phase de maturité, cela signifie que lorsque les POM sont modifiés assez souvent, le mode hors ligne sera très peu pratique, car vous devrez également mettre à jour votre référentiel assez souvent. À moins que vous ne puissiez obtenir une copie d'un référentiel contenant tout ce dont vous avez besoin, mais comment le sauriez-vous? Habituellement, vous démarrez un référentiel à partir de zéro et il est cloné progressivement au cours du développement (sur un ordinateur connecté à un autre référentiel). Une copie du référentiel public repo1.maven.org pèse des centaines de gigaoctets, donc je ne recommanderais pas non plus la force brute.
Un nouveau plugin est apparu pour corriger les lacunes de mvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
Ajoutez-le dans votre pom, puis exécutez mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
. Une fois que vous avez configuré toutes les dépendances dynamiques, maven n'essaiera plus de télécharger quoi que ce soit (jusqu'à ce que vous mettiez à jour les versions).
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
à
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
Modifiez la balise hors ligne de false à true.
va télécharger à partir du repo en ligne