it-swarm-eu.dev

Kann ich in der Befehlszeile Maven-Repositorys hinzufügen?

Ich bin mir bewusst, dass ich Maven-Repositorys zum Abrufen von Abhängigkeiten in ~/.m2/settings.xml hinzufügen kann. Ist es jedoch möglich, ein Repository über die Befehlszeile hinzuzufügen, etwa:

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

Der Grund, warum ich dies tun möchte, ist, dass ich ein kontinuierliches Integrationstool verwende, mit dem ich die Befehlszeilenoptionen, die zum Aufrufen von maven verwendet werden, vollständig steuern kann, aber die settings.xml für den Benutzer, der das Integrationstool ausführt, ist ein wenig zu verwalten ein Ärger.

62

Sie können dies tun, aber Sie sind wahrscheinlich besser dran, es in der POM zu tun, wie andere gesagt haben.

In der Befehlszeile können Sie eine Eigenschaft für das lokale Repository und ein anderes Repository für die Remote-Repositorys angeben. Das Remote-Repository verfügt jedoch über alle Standardeinstellungen

Das folgende Beispiel gibt zwei Remote-Repositorys und ein benutzerdefiniertes lokales Repository an.

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

Eines der Ziele von Maven't Project Object Model (POM) ist es, alle Informationen zu erfassen, die zur zuverlässigen Reproduktion eines Artefakts erforderlich sind. Daher wird dringend davon abgeraten, Einstellungen vorzunehmen, die sich auf die Erstellung des Artefakts auswirken.

Um Ihr Ziel zu erreichen, können Sie Ihre settings.xml-Datei auf Benutzerebene mit jedem Projekt einchecken und die Option -s (oder --settings) verwenden, um sie an den Build zu übergeben.

6
ddimitrov

Ich bin mir nicht sicher, ob Sie dies über die Befehlszeile tun können. Sie können im pom.xml Repositorys hinzufügen, wie im folgenden Beispiel gezeigt. Bei dieser Vorgehensweise müssen Sie die Datei ~/.m2/settings.xml nicht ändern.

    <?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

Ich gehe hier davon aus, dass Sie dies fragen, weil Sie gelegentlich ein neues Repository von Drittanbietern zu Ihren Builds hinzufügen möchten. Ich kann mich natürlich irren ... :)

In diesem Fall empfiehlt es sich, einen verwalteten Proxy wie Artifactory oder Nexus zu verwenden. Nehmen Sie dann eine einmalige Änderung in settings.xml vor, um dies als Spiegel für die Welt einzurichten.

Alle Repos von Drittanbietern, die Sie ab diesem Zeitpunkt hinzufügen müssen, können über den Proxy abgewickelt werden.

3
Kevin Wright

Wie @Jorge Ferreira bereits sagte, setzen Sie Ihre Repository-Definitionen in die pom.xml. Verwenden Sie profiles zusätzlich, um das Repository auszuwählen, das über die Befehlszeile verwendet werden soll:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

Ich habe Maven 2 vorher noch nicht wirklich benutzt, unser System arbeitet wegen einiger Probleme mit Maven 2 immer noch mit Maven 1.x.

In der Dokumentation zu maven 2 scheint es jedoch keine spezifischen Systemeigenschaften zu geben. Möglicherweise können Sie jedoch mithilfe der Systemeigenschaften eine in Ihre poms/settings integrieren. Siehe dazu auch den Abschnitt zu den Systemeigenschaften http://maven.Apache.org/settings.html

Sie haben also $ {maven.repository} in Ihrer Einstellungsdatei und verwenden dann das -Dmaven.repository wie oben beschrieben.

Ich bin mir nicht sicher, ob dies funktionieren würde, aber mit einigem Nachbessern können Sie sich sicher etwas einfallen lassen.

2
Henry B

Erstellen Sie einen POM mit den gewünschten Repository-Einstellungen und verwenden Sie dann ein übergeordnetes Element in Ihren Projekt-POMs, um die zusätzlichen Repositorys zu erben. Die Verwendung eines "Organisations" -POM hat mehrere andere Vorteile, wenn eine Gruppe von Projekten zu einem Team gehört.

1
Steve Moyer