2008-09-16 4 views
44

Ich bin mir bewusst, dass ich Maven Repositories hinzufügen können, um Abhängigkeiten in ~/.m2/settings.xml abzurufen. Aber ist es möglich, ein Repository mit der Befehlszeile hinzuzufügen, so etwas wie:Kann ich Maven-Repositories in der Befehlszeile hinzufügen?

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

Der Grund, warum ich dies tun möchte, ist, weil ich eine kontinuierliche Integration-Tool bin mit dem ich die volle Kontrolle über die Kommandozeilenoptionen haben es verwendet, um Maven aufzurufen, aber die Verwaltung der settings.xml für den Benutzer, der das Integrationstool ausführt, ist ein wenig mühsam.

Antwort

57

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.

Im folgenden Beispiel werden zwei Remote-Repositorys und ein benutzerdefiniertes lokales Repository angegeben.

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

sieht aus wie das funktioniert nicht für maven2, oder liege ich falsch? –

+0

Dies ist nützlich, um ein geschlossenes Sonatype-Repo vor der Veröffentlichung zu testen. – schmmd

+2

Wie gebe ich den Benutzernamen und das Passwort für die Fernbedienung an? –

3

Ich bin mir nicht sicher, ob Sie es über die Befehlszeile tun können. Sie können auf der anderen Seite Repositories in der pom.xml wie im folgenden Beispiel hinzufügen. 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> 
1

Ich habe nicht wirklich 2 verwendet Maven vor, unser System immer noch auf Maven 1.x arbeitet wegen einiger Probleme mit Maven 2.

jedoch bei der Dokumentation der Suche nach Maven 2 scheint es, dass es keine bestimmten Systemeigenschaften wie diese gibt. Sie könnten jedoch wahrscheinlich eine in Ihre Poms/Einstellungen unter Verwendung der Systemeigenschaften erstellen. Siehe Systemeigenschaften Teil http://maven.apache.org/settings.html

Sie hätten also $ {maven.repository} in Ihrer Einstellungsdatei und dann das -Dmaven.repository wie oben.

Ich bin mir nicht sicher, ob das funktionieren würde, aber mit etwas Feinabstimmung bin ich mir sicher, dass Sie sich etwas einfallen lassen können.

3

Als @Jorge Ferreira bereits gesagt, legen Sie Ihre Repository-Definitionen in der pom.xml. Verwenden Sie profiles adittionally das Repository auszuwählen über die Befehlszeile zu verwenden:

mvn deploy -P MyRepo2 

mvn deploy -P MyRepo1 
1

ein POM erstellen, die die Repository-Einstellungen, die Sie wollen, und dann ein übergeordnetes Element in Ihrem Projekt POMs verwenden, um die zusätzlichen Repositories zu erben. Die Verwendung einer "Organisation" POM hat mehrere andere Vorteile, wenn eine Gruppe von Projekten zu einem Team gehört.

5

Eines der Ziele von Maven't Project Object Model (POM) besteht darin, alle Informationen zu erfassen, die für die zuverlässige Reproduktion eines Artefakts erforderlich sind. Daher wird dringend davon abgeraten, Einstellungen zu übergeben, die die Artefakt-Erstellung beeinflussen.

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.

2

Ich werde hier davon ausgehen, dass Sie dies zu fragen, weil Sie gelegentlich eine neue 3rd-Party-Repository in Ihren Builds hinzufügen mögen. Ich kann mich natürlich irren ...:)

Ihre beste Wette ist in diesem Fall, einen verwalteten Proxy wie Artefakt oder Nexus zu verwenden. Nehmen Sie dann eine einmalige Änderung in settings.xml vor, um dies als Spiegel für die Welt einzurichten.

Alle Drittanbieter-Repos, die Sie von diesem Punkt an hinzufügen müssen, können über den Proxy verarbeitet werden.

Verwandte Themen