Maven privé à distance référentiel de configuration

j'essaie de mettre en place un dépôt privé à distance pour notre équipe. Maintenant le dépôt sert le suivant avec jusqu'ici j'ai essayé -

  • "quand un mvn compiler "est émis, alors il recherche les dépendances dans"~/.m2". S'il n'y est pas trouvé, il va vers le dépôt privé distant et, lorsque les dépendances sont encore absentes, il va vers le dépôt central.

  • avant la compilation, je dois mettre toutes les dépendances dans notre dépôt 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 mettre dans le dépôt privé distant avec toutes les dépendances de cet artefact (par exemple-spring-mvc). Dans ce cas," spring-mvc " est téléchargé depuis notre dépôt privé distant. Mais les dépendances de "spring-mvc" ne sont pas téléchargées à partir de notre référentiel. Ils sont téléchargés à partir du dépôt central.

maintenant ce que j'essaie de faire sont -

  • configurer un dépôt privé à distance" R " de telle sorte que je n'ai pas à mettre toutes les dépendances à la main. Lorsqu'un" mvn Compiler "est émis, alors tout d'abord; les dépendances sont recherchées dans"~/.m2 "si elle n'est pas trouvée, elle va au dépôt privé à distance "R". Si les dépendances sont trouvé dans " R " puis "~/.m2" sera obtenu de'R'. Si les dépendances ne se trouvent pas dans "R", ces dépendances sont téléchargées à partir des dépôts centraux et gardent les dépendances dans " R " pour d'autres utilisations. Après que '~/.m2 'les obtiendra de'R'. Ici, je n'ai pas besoin de mettre les dépendances dans notre dépôt privé à distance " R " à la main.

  • '~/.m2 'obtiendra toutes les dépendances de "spring-mvc" (qui est la principale dépendance mentionnée dans mon le projet est pom.xml) à partir du dépôt privé distant 'R' et 'R' Les obtiendront à partir du dépôt central respectif.

est-ce que quelqu'un peut suggérer un moyen/ou un tutoriel de référence pour atteindre ces deux objectifs ci-dessus? Merci à l'avance.

EDIT : j'ai essayé avec Nathaniel Waisbrot 's réponse et nexus-2.7.0-06-bundle. Après des heures d'efforts, je suis capable de le mettre en place pendant que je j'utilise du jre-7. Avec jre-6, nexus ne peut pas être lancé. Mais notre projet est déployé avec JDK-6. Nous ne voulons pas changer la version actuelle 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 utilisateur/expert archiva qui peut me dire si je peux atteindre ces objectifs dans la section précédente?

24
demandé sur Razib 2014-01-02 16:07:50

3 réponses

j'ai configuré nexus pour créer un miroir de mon dépôt local maven (à ~/.m2/repository. ) puisque ce post est encore visité par beaucoup de gens, je pense qu'il serait utile pour d'autres si je partage la façon dont j'ai configuré nexus en tant que gestionnaire de dépôt. Cette procédure fonctionne parfaitement pour moi Ubuntu 12.04 . Le voici -

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 le répertoire /usr/local/ (ils peuvent être copiés dans un autre répertoire) lieu) -

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

les fichiers exécutables/de configuration relatifs à nexus sont stockés dans le répertoire nexus-2.11.1-01 et le fichier jar mentionné dans pom.xml est stocké dans le répertoire sonatype-work .

Ces fichiers jar sont le miroir de votre ~/.m2/repository . La première fois que vous lancez une commande mvn package , alors tous les jar sont stockés ici. Après cela, lorsque vous émettez mvn package à nouveau, puis tous les pots sont téléchargés à partir de la nexus dépôt au lieu de télécharger à partir du dépôt central.

4. aller à l'annuaire /usr/local/ -

$ cd /usr/local/  

5. créer un lien vers nexus-2.11.1-01 -

$ sudo ln -s nexus-2.7.0-06 nexus

6. maintenant pour exécuter le type nexus le suivant dans le terminal -

$ bash nexus/bin/nexus console  

ici nexus est attaché à votre console. Si vous fermez votre console alors le serveur nexus sera terminé. Lorsque vous essayez d'exécuter nexus pour une machine serveur Ubuntu, vous pouvez utiliser l'écran .

Note: en essayant d'exécuter nexus en utilisant la commande ci-dessus, il peut y avoir 2 problèmes. Si vous n'avez pas trouvé de problème, sautez les 2 étapes suivantes (Étape 7 et 8)

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

$ 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, le message d'erreur suivant peut s'afficher -

wrapper | Lancement de la JVM... wrapper / JVM est sorti pendant le chargement application. jvm 1 / Exception dans le fil "main"" Java.lang.UnsupportedClassVersionError: org/sonatype/nexus/bootstrap/jsw / JswLauncher : major non supporté.mineur version 51.0

Dans ce cas, utilisez jdk7 pour exécuter la commande mentionnée à l'étape 6. À ubuntu c'est assez facile. En supposant que vous avez deux jdk-jdk6 et jdk7. Votre projet fonctionne sur jdk6. Alors seulement 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 type de navigateur l'adresse - http://localhost:8081/nexus / . Si les étapes 1 à 6 (Si des erreurs se sont produites alors les étapes 1 à 8) sont faites parfaitement, 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êter la nexus. Fermez le terminal ou appuyez sur Ctrl+C à l'étape 6 du terminal. Dans votre répertoire ~/.m2 , créez un fichier vide nommé - settings.xml . Copiez le contenu suivant dans ce fichier settings.xml -

<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 ajouter les lignes suivantes dans le fichier pom.xml de votre projet -

<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>
41
répondu Razib 2018-06-27 07:05:08

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

en gros, vous pouvez configurer Nexus comme un dépôt cache: votre client Maven ne visitera que le dépôt interne. Quand le dépôt interne ne peut pas trouver un artefact, il va à Central (ou n'importe autres dépôts externes 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 grab-whatever-dependencies-you-want free-for-all à un environnement verrouillé, Nexus le rend facile. Vous l'avez configuré pour tirer à partir de Central, exécuter votre build à partir d'une machine propre (forçant Nexus à ingérer toutes les dépendances centrales actuelles) et ensuite désactiver la fonctionnalité proxy-repo (ainsi toute nouvelle / dépendance modifiée sera gérée par devops).

8
répondu Nathaniel Waisbrot 2017-05-23 12:34:45

ce que vous avez décrit est à peu près la configuration par défaut de la plupart des gestionnaires de dépôts, y compris Archiva. La suite vous aider à obtenir qu'à l'utilisation de Maven?

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

4
répondu Brett Porter 2014-01-05 23:02:10