2010-03-02 11 views
44

Ich habe gerade ein paar Projekte ausgecheckt und muss sie bauen, aber ich habe Maven vor einiger Zeit (6 Monate vielleicht?) Installiert und habe es seitdem wirklich nicht mehr benutzt - die pom.xml für das Projekt, das ich nicht habe diese „http://repo1.maven.org/myurlhere“ überall drin - es hat die absolute uRL, die maven Repo für das Projekt ist, aber maven versucht immer noch von dem allgemeinen maven Repo zum Download:Wie bekomme ich Maven die richtigen Repositories zu verwenden?

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 helfen mit dem, was ich m nicht richtig machen, im Grunde habe ich nur die Projekte aus der Befehlszeile, cd-ed in das Verzeichnis und lief "mvn clean install" - sonst nichts. Jede Hilfe wird sehr geschätzt.

Antwort

4

Grundsätzlich sagt Ihnen Maven, dass bestimmte Abhängigkeiten in Ihrem Projekt nicht im zentralen maven-Repository verfügbar sind. Standardmäßig suchen Sie in Ihrem lokalen Ordner .m2 (lokales Repository) und dann in allen konfigurierten Repositorys in Ihrem POM und dann im zentralen maven-Repository. Sehen 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 werden konnten und das Projekt von Grund auf neu erstellt werden konnte.

23

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

Wenn Maven versucht, ein Projekt zu bauen, ist es in Ihrem lokalen Repository aussehen wird (standardmäßig ~/.m2/repository aber Sie können es konfigurieren, indem Sie den <localRepository> Wert in Ihrem ~/.m2/settings.xml Ändern) jede Abhängigkeit, Plugin zu finden oder in Ihrem pom.xml definiert berichten. Wenn das entsprechende Artefakt in Ihrem lokalen Repository nicht gefunden wird, wird es in allen konfigurierten externen Repositorys angezeigt, beginnend mit dem Standard-http://repo1.maven.org.

Sie können Maven konfigurieren, dass diese Standard-Repository zu vermeiden, indem sie einen Spiegel in Ihrer settings.xml Bildeinstellung:

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

diese Weise statt http://repo1.maven.org der Kontaktaufnahme mit Maven Ihre entreprise Repository (http://the/server in diesem Beispiel) in Verbindung.

Wenn Sie ein anderes Repository hinzufügen möchten, können Sie eine neue in Ihrer settings.xml 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 die komplette settings.xml Modell here sehen.

In Bezug auf die clean Prozess können Sie Maven bitten, es offline ausführen. In diesem Fall wird Maven nicht versuchen, alle externen Repositories zu erreichen:

mvn -o clean 
+1

Maven löst keine Abhängigkeiten während der Bereinigung, es muss nicht offline ausgeführt werden (zumindest nicht mit maven 2.2.1 und dem sauberen Plugin 2.2). –

+4

NIEMALS verwenden Sie den Platzhalter "*" Ausdruck beim Definieren von Spiegeln oder Sie werden nicht in der Lage sein, Drittanbieter-Tools oder Beispielprojekte zu erstellen, die benutzerdefinierte Repositories in ihren Poms definieren. – HDave

+0

Was ist mit dem Definieren und Überschreiben dieses in meiner Projektdatei pom.xml gleichzusetzen? – powder366

53

die pom.xml für das Projekt Ich habe dieses "http://repo1.maven.org/myurlhere" hat nicht überall 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" geerbt (alle Projekte erben vom Super POM). Ein POM ist also eine Kombination aus dem Super POM, allen Eltern-POMs und dem aktuellen POM. Diese Kombination wird als "effektives POM" bezeichnet und kann unter Verwendung des Ziels effective-pom des Maven-Hilfeplugins (nützlich zum Debuggen) ausgedruckt werden.

Und in der Tat, wenn Sie laufen:

mvn help:effective-pom 

Sie zumindest die folgenden sehen werden:

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

hat es die absolute URL, die Maven Repo für das Projekt ist aber Maven versucht immer noch, aus dem allgemeinen Maven Repo

Maven wird versuchen, depe zu finden Abhängigkeiten in allen Repositorys deklariert, einschließlich in der Zentrale eine, die standardmäßig vorhanden ist, wie wir gesehen haben. Aber nach der Spur Sie zeigen, haben Sie nur eine Repository definiert (das zentrale Repository) oder Maven würde wie folgt 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) 

Also, im Grunde ist Maven nicht in der Lage die url.project:project:pom:x.x da finden Es ist nicht in der Zentrale verfügbar.

Aber ohne zu wissen, welches Projekt Sie ausgecheckt haben (es hat vielleicht spezifische Anweisungen) oder welche Abhängigkeit fehlt (es kann vielleicht in einem anderen Repository gefunden werden), es ist unmöglich, Ihnen weiter zu helfen.

+0

Um genau zu sehen, wo es bei der Ausführung überprüft wird, führen Sie 'mvn -U Abhängigkeit: resolve' aus -' -U' zwingt mvn zu einem erneuten Versuch, andernfalls speichert es den Fehler als Metadaten – Adam

Verwandte Themen