web-dev-qa-db-de.com

Wie bekomme ich, dass Maven die richtigen Repositorys verwendet?

Ich habe mir gerade ein paar Projekte angesehen und muss sie bauen, aber ich habe Maven vor einiger Zeit (vielleicht 6 Monate?) Installiert und seitdem nicht mehr verwendet - die pom.xml für das Projekt, das ich habe, hat dies nicht. " http://repo1.maven.org/myurlhere "irgendwo drin - es hat die absolute URL, wo sich das Maven-Repo für das Projekt befindet, aber Maven versucht immer noch, es vom allgemeinen Maven-Repo herunterzuladen:

Macintosh:trunk$ mvn clean install
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/url/project/project/x.x/project-x.x.pom
[INFO] Unable to find resource 'url.project:project:pom:x.x' in repository central (http://repo1.maven.org/)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

GroupId: url.project
ArtifactId: project
Version: x.x

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/)

Kann mir jemand bei dem helfen, was ich nicht richtig mache, im Grunde habe ich die Projekte von der Kommandozeile aus überprüft, cd-ed in das Verzeichnis geschrieben und "mvn clean install" ausgeführt - sonst nichts. Jede Hilfe wird sehr geschätzt.

50
user284163

die pom.xml für das Projekt, das ich habe, hat dieses " http://repo1.maven.org/myurlhere " nirgendwo drin

Alle -Projekte haben http://repo1.maven.org/ standardmäßig als <repository> (und <pluginRepository>) deklariert. Dieses Repository, das als zentrales Repository bezeichnet wird, wird wie andere Standardeinstellungen vom "Super POM" (alle Projekte, die vom Super POM erben) geerbt. Ein POM ist also eine Kombination aus dem Super-POM, allen übergeordneten POMs und dem aktuellen POM. Diese Kombination wird als "effektives POM" bezeichnet und kann mit dem effective-pom-Ziel des Maven-Hilfe-Plugins (nützlich für das Debuggen) gedruckt werden.

Und in der Tat, wenn du rennst:

mvn help:effective-pom

Sie sehen mindestens Folgendes:

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>

es hat die absolute URL, wo sich das Maven-Repo für das Projekt befindet, aber Maven versucht immer noch, das allgemeine Maven-Repo herunterzuladen

Maven wird versuchen, Abhängigkeiten in allen deklarierten Repositorys zu finden, einschließlich in zentral, das standardmäßig vorhanden ist, wie wir gesehen haben. Gemäß der von Ihnen angezeigten Ablaufverfolgung haben Sie jedoch nur ein one -Repository definiert (das zentrale Repository) oder maven würde Folgendes drucken:

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/),
  another-repository (http://another/repository)

Im Grunde kann maven den url.project:project:pom:x.x nicht finden, da er in der Zentrale nicht verfügbar ist.

Aber ohne zu wissen, welches Projekt Sie ausgecheckt haben (es enthält möglicherweise bestimmte Anweisungen) oder welche Abhängigkeit fehlt (es ist möglicherweise in einem anderen Repository zu finden), ist es unmöglich, Ihnen weiterzuhelfen.

60
Pascal Thivent

Standardmäßig sucht Maven immer im offiziellen Maven-Repository, nämlich http://repo1.maven.org .

Wenn Maven versucht, ein Projekt zu erstellen, wird in Ihrem lokalen Repository gesucht (standardmäßig ~/.m2/repository, Sie können es jedoch konfigurieren, indem Sie den <localRepository>-Wert in ~/.m2/settings.xml ändern), um nach Abhängigkeiten, Plugins oder Berichten zu suchen, die in pom.xml definiert sind. Wenn das entsprechende Artefakt nicht in Ihrem lokalen Repository gefunden wird, wird in allen konfigurierten externen Repositorys nach dem Standard-Repository http://repo1.maven.org gesucht.

Sie können Maven so konfigurieren, dass dieses Standard-Repository vermieden wird, indem Sie eine Spiegelung in Ihrer settings.xml-Datei festlegen:

<mirrors>
    <mirror>
        <id>repoMirror</id>
        <name>Our mirror for Maven repository</name>
        <url>http://the/server/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

Auf diese Weise wird sich Maven, anstatt http://repo1.maven.org zu kontaktieren, mit Ihrem Unternehmens-Repository (in diesem Beispiel http://the/server) in Verbindung setzen.

Wenn Sie ein anderes Repository hinzufügen möchten, können Sie in Ihrer Datei settings.xml ein neues definieren:

<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>foo.bar</id>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <url>http://new/repository/server</url>
            </repository>
        </repositories>

Sie können das vollständige settings.xml-Modell hier sehen.

In Bezug auf den clean-Prozess können Sie Maven bitten, offline auszuführen. In diesem Fall versucht Maven nicht, externe Repositorys zu erreichen:

mvn -o clean 
26
Romain Linsolas

Grundsätzlich sagt Ihnen Maven nur, dass bestimmte Abhängigkeiten in Ihrem Projekt nicht im zentralen Maven-Repository vorhanden sind. Standardmäßig wird in Ihrem lokalen .m2-Ordner (lokales Repository) nach konfigurierten Repositorys in Ihrem POM und dann in dem zentralen Maven-Repository gesucht. Schauen Sie sich die Repositories section der Maven-Referenz an.

Das Problem ist, dass das eingecheckte Projekt das POM nicht so konfiguriert hat, dass alle Abhängigkeiten gefunden und das Projekt von Grund auf neu erstellt werden konnte.

4
Taylor Leese

Ich denke, was Sie hier vermisst haben, ist folgendes:

https://maven.Apache.org/settings.html#Servers

Die Repositorys für Download und Bereitstellung werden durch die Repositorys und distributionManagement-Elemente des POM definiert. Bestimmte Einstellungen wie Benutzername und Passwort sollten jedoch nicht zusammen mit der pom.xml verteilt werden. Diese Art von Informationen sollte auf dem Build-Server in der Datei "settings.xml" vorhanden sein.

Dies ist die bevorzugte Art, benutzerdefinierte Repos zu verwenden. Wahrscheinlich ist es also so, dass sich die URL dieses Repos in settings.xml des Build-Servers befindet.

Sobald Sie die URL und die Anmeldeinformationen erhalten haben, können Sie sie hier in Ihren Computer eingeben: ~/.m2/settings.xml wie folgt:

<settings ...> 

        .
        .
        .
        <servers>
            <server>
              <id>internal-repository-group</id>
              <username>YOUR-USERNAME-HERE</username>
              <password>YOUR-PASSWORD-HERE</password>
            </server>
        </servers>
</settings>
0
shabby