web-dev-qa-db-fra.com

Configuration du référentiel distant privé Maven

J'essaie de mettre en place un référentiel distant privé pour notre équipe. Maintenant, le référentiel sert ce qui suit avec jusqu'à présent, j'ai essayé -

  • Lorsqu'une ' compilation mvn ' est émise, elle recherche les dépendances dans "~/.m2". S'il n'y est pas trouvé, il va dans le référentiel privé distant et lorsque les dépendances sont toujours absentes ici, il va dans le référentiel central.

  • Avant la compilation, je dois mettre toutes les dépendances dans notre référentiel privé (et distant) avec la somme de contrôle et les métadonnées.

  • Lorsque nous avons besoin d'un artefact (par exemple - spring-mvc), nous devons le placer dans le référentiel privé distant avec toutes les dépendances de cet artefact (spring-mvc). Dans ce cas, "spring-mvc" est téléchargé à partir de notre référentiel privé distant. Mais les dépendances de "spring-mvc" ne sont pas téléchargées depuis notre dépôt privé distant. Ils sont téléchargés depuis le référentiel central.

Maintenant, ce que j'essaie de faire sont -

  • Configurer un référentiel privé distant 'R' de telle manière que je n'ai pas à lui mettre toutes les dépendances à la main. Lorsqu'une "compilation mvn" est émise, tout d'abord; les dépendances sont recherchées dans "~/.m2" si elles ne sont pas trouvées, puis elles vont au référentiel distant privé 'R'. Si les dépendances se trouvent dans 'R' alors "~/.m2" les obtiendra de 'R'. Si les dépendances ne se trouvent pas dans "R", ces dépendances sont téléchargées à partir des référentiels centraux et conservent les dépendances dans "R" pour d'autres utilisations. Après cela, "~/.m2" les récupérera de "R". Ici, je n'ai pas besoin de mettre à la main les dépendances dans notre référentiel privé distant "R".

  • '~/.m2' obtiendra toutes les dépendances de "spring-mvc" (qui est la principale dépendance mentionnée dans le pom.xml de mon projet) du référentiel privé distant 'R' et 'R' les obtiendra du référentiel central respectif .

Quelqu'un peut-il suggérer un moyen/ou un tutoriel de référence pour atteindre ces deux objectifs ci-dessus? Merci d'avance.

EDIT: J'ai essayé avec la réponse de Nathaniel Waisbrot et le nexus-2.7.0-06-bundle. Après des heures d'efforts, je peux le configurer pendant que j'utilise jre-7. Avec jre-6, nexus ne peut pas être démarré. Mais notre projet est déployé avec JDK-6. Nous ne voulons pas changer la version actuelle de jre. Avec jre-6 Apache-archiva est OK. Mais je ne suis pas sûr de pouvoir atteindre tous les objectifs de la section précédente. Y a-t-il un archiva utilisateur/expert qui peut me dire si je peux atteindre ces objectifs dans la section précédente?

24
Razib

J'ai configuré nexus pour mettre en miroir mon référentiel local maven (à ~/.m2/repository.) Étant donné que ce message est toujours visité par beaucoup de gens, je pense qu'il serait utile pour les autres si je partage la façon dont j'ai configuré nexus en tant que gestionnaire de référentiel. Cette procédure fonctionne parfaitement pour moi dans Ubuntu 12.04. C'est ici -

1. Télécharger nexus-2.11.1-01-bundle.tar.gz ou la dernière version de nexus oss.

2. Extraire le fichier tar dans votre répertoire personnel-

$ tar -xvf nexus-2.11.1-01-bundle.tar.gz

Maintenant, vous obtiendrez deux répertoires - nexus-2.11.1-01 et sonatype-work dans votre répertoire personnel.

3. Copiez ces deux répertoires dans /usr/local/ répertoire (ils peuvent être copiés ailleurs) -

$ cp -r nexus-2.11.1-01 /usr/local/
$ cp -r sonatype-work /usr/local/

Les fichiers exécutables/de configuration liés à Nexus sont stockés dans nexus-2.11.1-01 répertoire et le fichier jar mentionné dans pom.xml sont stockés dans sonatype-work répertoire.
Ces fichiers jar sont le miroir de votre ~/.m2/repository. La première fois que vous émettez un mvn package alors tous les jar sont stockés ici. Ensuite, lorsque vous lancez mvn package encore une fois, tous les fichiers jar sont téléchargés depuis le référentiel nexus au lieu d'être téléchargés depuis le référentiel central.

4. Allez dans le /usr/local/ répertoire -

$ cd /usr/local/  

5. Créez un lien vers nexus-2.11.1-01 -

$ Sudo ln -s nexus-2.7.0-06 nexus

6. Pour exécuter nexus, tapez ce qui suit dans le terminal -

$ bash nexus/bin/nexus console  

Ici, nexus est attaché à votre console. Si vous fermez votre console, le serveur Nexus sera arrêté. Lorsque vous essayez d'exécuter nexus pour une machine serveur Ubuntu, vous pouvez utiliser écran.

Remarque: Lors de la tentative d'exécution de nexus à l'aide de la commande ci-dessus, deux problèmes peuvent survenir. Si vous n'avez trouvé aucun problème, sautez les 2 étapes suivantes (étape - 7 et 8)

7. Le premier problème peut se produire en raison d'une autorisation insuffisante. Lisez le message d'erreur et prenez les mesures nécessaires. Mais comme solution rapide vous pouvez le faire -

$ Sudo chmod -R 777 nexus-2.11.1-01/
$ Sudo chmod -R 777 sonatype-work/

8. Si vous utilisez une version jdk inférieure à Java 7 que le message d'erreur suivant peut être montré -

emballage | Lancement d'un wrapper JVM ... | JVM s'est arrêtée lors du chargement de l'application. jvm 1 | Exception dans le thread "principal" Java.lang.UnsupportedClassVersionError: org/sonatype/nexus/bootstrap/jsw/JswLauncher: Unsupported major.minor version 51.0

Dans ce cas, utilisez jdk7 pour exécuter la commande mentionnée à l'étape 6. Dans ubuntu, c'est assez facile. En supposant que vous ayez deux jdk - jdk6 et jdk7. Votre projet s'exécute sur jdk6. Ensuite, uniquement pour exécuter nexus, vous pouvez le faire à partir de votre terminal (en supposant que votre jdk7 dans /usr/lib/jvm/jdk1.7.0_45 répertoire) -

$ export Java_HOME=/usr/lib/jvm/jdk1.7.0_45
$ export PATH=$Java_HOME/bin:$PATH  

9. Maintenant, dans le navigateur, tapez l'adresse - http: // localhost: 8081/nexus/. Si les étapes 1 à 6 (si des erreurs sont survenues, puis les étapes 1 à 8) sont parfaitement effectuées, vous pouvez trouver avec succès l'écran de connexion. Le nom d'utilisateur de connexion par défaut est - admin et le mot de passe est - admin123

10. Arrêtez le lien. Fermez simplement le terminal ou appuyez sur Ctrl + C au terminal de l'étape 6. En toi ~/.m2 répertoire crée un fichier vide nommé - settings.xml. Copiez le contenu suivant dans ce settings.xml fichier -

<settings>
    <mirrors>
        <mirror>
        <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                <id>central</id>
                <url>http://central</url>
                <releases><enabled>true</enabled></releases>
                <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

    <activeProfiles>
    <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

11. Et ajoutez ces lignes suivantes dans le pom.xml fichier -

<distributionManagement>
    <snapshotRepository>
        <id>my-snapshots</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

    <repository>
        <id>my-releases</id>
        <name>My internal repository</name>
        <url>http://localhost:8081/nexus/content/repositories/releases</url>
    </repository>
</distributionManagement>
43
Razib

Sonatype Nexus fait tout ce que vous voulez, a besoin de très peu de configuration pour ce que vous demandez et dispose d'une interface agréable. Il y a quelques détails sur la configuration de base sous la question " Référentiel interne Maven, est-ce vraiment si difficile? "

Fondamentalement, vous pouvez configurer Nexus en tant que référentiel de mise en cache: votre client Maven ne visitera que le référentiel interne. Lorsque le référentiel interne ne trouve pas d'artefact, il va à Central (ou à tout autre référentiel externe que vous définissez), le récupère pour vous et le stocke pour plus tard.

C'est cool parce que si vous voulez passer d'un accès gratuit à toutes les dépendances à un environnement verrouillé, Nexus vous facilite la tâche. Vous le configurez pour extraire de Central, exécutez votre génération à partir d'une machine propre (forçant Nexus à ingérer toutes les dépendances centrales actuelles), puis désactivez la fonction proxy-repo (de sorte que toutes les dépendances nouvelles/modifiées seront gérées par devops).

8
Nathaniel Waisbrot

Ce que vous avez décrit est à peu près la configuration par défaut de la plupart des gestionnaires de référentiels, y compris Archiva. Est-ce que ce qui suit aide à le configurer pour l'utiliser à partir de Maven?

http://archiva.Apache.org/docs/1.3.6/userguide/using-repository.html

4
Brett Porter