web-dev-qa-db-fra.com

Puis-je ajouter des référentiels maven dans la ligne de commande?

Je sais que je peux ajouter des référentiels maven pour récupérer les dépendances dans ~/.m2/settings.xml. Mais est-il possible d'ajouter un référentiel en utilisant la ligne de commande, quelque chose comme:

mvn install -Dmaven.repository=http://example.com/maven2

La raison pour laquelle je veux le faire est que j'utilise un outil d'intégration continue où j'ai un contrôle total sur les options de ligne de commande qu'il utilise pour appeler maven, mais la gestion du fichier settings.xml pour l'utilisateur qui exécute l'outil d'intégration est un peu d'une dispute.

62
Sindri Traustason

Vous pouvez le faire, mais vous feriez probablement mieux de le faire dans le POM comme d'autres l'ont dit.

Sur la ligne de commande, vous pouvez spécifier une propriété pour le référentiel local et un autre référentiel pour les référentiels distants. Le référentiel distant aura cependant tous les paramètres par défaut

L'exemple ci-dessous spécifie deux référentiels distants et un référentiel local personnalisé.

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
69
Rich Seller

L'un des objectifs du modèle d'objet de projet Mavn't (POM) est de capturer toutes les informations nécessaires pour reproduire de manière fiable un artefact.

Pour atteindre votre objectif, vous pouvez archiver votre fichier settings.xml au niveau de l'utilisateur avec chaque projet et utiliser l'option -s (ou --settings) pour le transmettre à la génération.

6
ddimitrov

Je ne sais pas si vous pouvez le faire en utilisant la ligne de commande. Vous pouvez en revanche ajouter des référentiels dans le pom.xml comme dans l'exemple suivant. En utilisant cette approche, vous n'avez pas besoin de modifier le fichier ~/.m2/settings.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.Apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    ...
    <repositories>
            <repository>
                <id>MavenCentral</id>
                <name>Maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
...
            <repository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>

    ...

        <pluginRepositories>
            <pluginRepository>
                <id>Apache.snapshots</id>
                <name>Apache Snapshot Repository</name>
                <url>
                    http://people.Apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
            <pluginRepository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>

    ...

    </project>
5
Jorge Ferreira

Je suppose ici que vous posez cette question, car vous souhaitez parfois ajouter un nouveau référentiel tiers à vos builds. Je peux me tromper bien sûr ... :)

Dans ce cas, votre meilleur pari est d'utiliser un proxy géré tel que artificiel ou nexus. Ensuite, apportez une modification unique dans settings.xml pour configurer cela comme un miroir pour le monde.

Tout référentiel tiers que vous devez ajouter à partir de ce moment peut être géré via le proxy.

3
Kevin Wright

Comme @Jorge Ferreira l'a déjà dit, mettez vos définitions de référentiel dans le pom.xml. Utilisez profiles de manière adittionnelle pour sélectionner le référentiel à utiliser via la ligne de commande:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

Je n'ai pas vraiment utilisé maven 2 auparavant, notre système fonctionne toujours sur maven 1.x à cause de certains problèmes avec maven 2.

Cependant, en regardant la documentation de maven 2, il semble qu'il n'y ait pas de propriétés système spécifiques comme ça. Cependant, vous pourriez probablement en créer un dans vos poms/paramètres en utilisant les propriétés du système. Voir la partie Propriétés système de ceci http://maven.Apache.org/settings.html

Vous auriez donc $ {maven.repository} dans votre fichier de paramètres, puis utiliser le -Dmaven.repository comme vous le faites ci-dessus.

Je ne sais pas si cela fonctionnerait, mais avec quelques ajustements, je suis sûr que vous pouvez trouver quelque chose.

2
Henry B

Créez un POM qui possède les paramètres de référentiel souhaités, puis utilisez un élément parent dans les POM de votre projet pour hériter des référentiels supplémentaires. L'utilisation d'un POM "organisation" présente plusieurs autres avantages lorsqu'un groupe de projets appartient à une même équipe.

1
Steve Moyer