web-dev-qa-db-fra.com

Comment configurer Maven pour le développement hors ligne?

Est-ce que maven nécessite une connexion Internet à un moment donné pour pouvoir l'utiliser? Cela signifie-t-il spécifiquement obtenir les plugins internes maven pour la compilation, le nettoyage, l’emballage, etc.?

105
user130532

Vous pouvez exécuter maven en mode hors connexion 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 les choses plus transparentes. C’est pour cette raison que de nombreux magasins utilisent des miroirs internes synchronisés de manière incrémentielle avec le dépôt central.

De plus, le mvn dependency:go-offline peut être utilisé pour vous assurer que toutes vos dépendances sont installées localement avant de commencer à travailler en mode hors connexion.

144
nsfyn55

Si vous avez un PC avec un accès Internet sur votre réseau local, 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 à installer.

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 liées à 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 le paramètre settings.xml De Maven 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 sur nos machines de développement et que certains artefacts téléchargeaient des fichiers corrompus ou ne le téléchargeaient pas du tout. Nous n'avons pas eu de problèmes depuis.

10
Marcelo

Vous avez deux options pour cela:

1.) apporter des modifications dans le settings.xml ajouter 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
8
Jyoti Prakash

Maven a besoin des dépendances de votre référentiel local. Le moyen le plus simple de les obtenir est d’avoir un accès Internet (ou plus difficile avec les autres solutions fournies ici).

Alors supposez que vous pouvez obtenir un accès Internet temporaire, vous pouvez vous préparer à passer hors ligne en utilisant le maven-dependency-plugin avec son objectif dépendance: aller hors connexion . Cela téléchargera toutes les dépendances de votre projet dans votre référentiel local (bien sûr, les modifications dans les dépendances/plugins nécessiteront un nouvel accès Internet/référentiel central).

6
FrVaBe

Malheureusement, dependency:go-offline N'a pas fonctionné pour moi car il n'a pas tout caché, c'est-à-dire. Les fichiers POM et autres mentionnent implicitement des dépendances.

La solution de contournement a consisté à spécifier un emplacement du référentiel local, soit dans le fichier settings.xml Avec <localRepository>...</localRepository>, Soit en exécutant mvn avec -Dmaven.repo.local=... paramètre. Après la construction 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 Maven build en mode hors connexion (mvn -o ...).

4
luka5z

Avant de vous déconnecter, vous devez vous assurer que tout se trouve dans votre dépôt local, ce qui est nécessaire pour travailler en mode hors connexion. L'exécution de "mvn dependency: go-offline" pour le (s) projet (s)/pom (s) sur lequel vous souhaitez travailler va réduire les efforts pour y parvenir.

Mais ce n’est généralement pas tout, parce que dépendance: go-offline ne téléchargera que les plug-in de "construction nue" ( go-offline/resolut-plugins ne résout pas toutes les dépendances des plugins ). Vous devez donc trouver un moyen de télécharger les plugins deploy/test/site (et peut-être d’autres) et leurs dépendances dans votre référentiel.

De plus, dépendance: go-offline ne télécharge pas l’artefact du pom lui-même, vous devez donc 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 très difficile la mise en place d'un dépôt "suffisant".

Quoi qu'il en soit, ayant un référentiel correctement rempli, il vous suffit d'ajouter "<hors connexion> vrai </ hors connexion>" au fichier settings.xml de Maven pour pouvoir vous déconnecter.

Ne modifiez pas le profil Maven (id) que vous avez utilisé pour remplir votre référentiel lorsque vous êtes hors ligne. Maven reconnaît les artefacts téléchargés dans ses métadonnées avec une "identité" liée à l'identifiant du profil.

3
Eike Pögel

Si vous utilisez IntelliJ, vous pouvez simplement aller à Préférences -> Génération, Exécution, Déploiement -> Outils de génération -> Maven et cochez/décochez travail hors connexion.

2
heez

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 plug-in et de pointer l'URL où qu'il se trouve.

<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 utiliser un serveur local, par exemple. Apache, sur vos machines.

2
gigadot

ou

Utilisez simplement des serveurs de référentiels Maven tels que Sonatype Nexus http://www.sonatype.org/nexus/ ou JFrog Artifactory https://www.jfrog.com/artifactory/ .

Après qu'un développeur ait créé un projet, la construction par les développeurs suivants ou Jenkins CI ne nécessitera plus d'accès à Internet.

Les serveurs de référentiels Maven peuvent également avoir des proxys configurés pour accéder à Maven Central (ou à plusieurs référentiels publics nécessaires), et ils peuvent avoir une liste cynchisée d'artefacts dans des référentiels distants.

2
Paul Verest

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 construction hors ligne complète:

La solution que je pourrais valider inclut l’utilisation de l’option --legacy-local-repository Maven plutôt que celle de -o (Hors ligne) et l’utilisation du référentiel local à la place du référentiel de distribution

De plus, je devais copier tous les fichiers maven-metadata-maven2_central.xml Du dépôt local dans le formulaire maven-metadata.xml Attendu par maven.

Voir la solution que j'ai trouvée ici .

0
user1767316

Répondez directement à votre question: elle ne nécessite pas de connexion Internet, mais un accès à un référentiel, sur un disque local ou local (utilisez les astuces des autres personnes qui ont posté ici).

Si votre projet ne se trouve pas dans une phase de maturité, cela signifie que lorsque les POM sont changés assez souvent, le mode hors connexion 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. Je ne recommanderais donc pas la force brute.

0
MaDa

En préparation avant de travailler hors ligne, lancez mvn dependency:go-offline

0
msangel