2012-04-10 16 views
2

Ich versuche, mein Projekt von Maven 2.2.1 auf Maven 3.0.4 zu aktualisieren, aber es treten Probleme mit einer Abhängigkeitsauflösung auf. Ich habe einen ganzen Tag damit verbracht, dies zu recherchieren, indem ich Maven-Dokumentation und ähnliche Beiträge durchgesehen habe, aber ich stecke immer noch fest. Das ist meine erste Frage zum Stackoverflow, also habe ich die Etikette hier hoffentlich gut genug befolgt. Danke für Ihre Hilfe!DependencyResolutionException beim Upgrade von Maven 2.2.1 auf Maven 3.0.4

Meine Projektstruktur ist wie folgt:

pom.xml (acme-parent) 
child-alpha 
+-----> pom.xml 

Darüber hinaus habe ich die folgenden Dateien in meinem eigenen Repository:

http://maven.my-own-repo.com/acme/child-dep-jdk15/maven-metadata-local.xml 
http://maven.my-own-repo.com/acme/child-dep-jdk15/1.0/child-dep-jdk15-1.0.jar 
http://maven.my-own-repo.com/acme/child-dep-jdk15/1.0/child-dep-jdk15-1.0.pom 

Kind-alpha/pom.xml wiederum ein Profil hat, Abhängigkeit von meinem eigenen acme: child-dep-jdk15, das separat in eine jar-Datei eingebaut wurde und eine eigene .pom-Datei hat, die einen Elternteil angibt, der derselbe Eltern-Eltern-Elternteil wie Kind-Alpha ist.

Hier sind Auszüge aus den relevanten Dateien:

Acme-parent pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>acme</groupId> 
    <artifactId>acme-parent</artifactId> 
    <name>Acme Parent Project</name> 
    <version>1</version> 
    <packaging>pom</packaging> 

    <properties>...</properties> 

    <modules> 
     <module>child-alpha</module> 
    </modules> 

    <repositories> 
     <repository> 
      <id>acme-repo</id> 
      <url>http://maven.my-own-repo.com</url> 
     </repository> 
     <repository> 
      <id>central</id> 
      <url>http://repo1.maven.org/maven2</url> 
     </repository> 
    </repositories> 

    <pluginRepositories>...</pluginRepositories> 

    <build> 
     <plugins>...</plugins> 
    </build> 

    <dependencies>...</dependencies> 
</project> 

Kind-alpha pom.xml:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>acme</groupId> 
     <artifactId>acme-parent</artifactId> 
     <version>1</version> 
    </parent> 
    <artifactId>child-alpha</artifactId> 
    <name>Child Alpha Project</name> 
    <version>1.0</version> 
    <packaging>jar</packaging> 

    <scm>...</scm> 

    <properties>...</properties> 

    <build> 
     <resources>...</resources> 
     <plugins>...</plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>jdk15</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
       <jdk>1.5</jdk> 
      </activation> 
      <dependencies> 
       <dependency> 
        <groupId>acme</groupId> 
        <artifactId>child-dep-jdk15</artifactId> 
        <version>1.0</version> 
       </dependency> 
      </dependencies> 
     </profile> 
    </profiles> 

    <dependencies>...</dependencies> 
</project> 

Kind-dep-jdk15- 1.0.pom:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>acme</groupId> 
     <artifactId>acme-parent</artifactId> 
     <version>1</version> 
    </parent> 
    <groupId>acme</groupId> 
    <artifactId>child-dep-jdk15</artifactId> 
    <name>Acme Child Dependency</name> 
    <version>1.0</version> 
    <packaging>jar</packaging> 

    <build>...</build> 

    <dependencies>...</dependencies> 
</project> 

Wh en Ich habe versucht, Kind-alpha (während im Kind-alpha-Verzeichnis), lief ich den folgenden Befehl zu bauen:

mvn -U -e clean install 

Und ich habe folgende Log-Meldungen und Stack-Trace (Fremd Nachrichten entfernt):

Downloading: http://maven2.my-own-repo.com/acme/acme-parent/1/acme-parent-1.pom 
Downloading: http://repo1.maven.org/maven2/acme/acme-parent/1/acme-parent-1.pom 

[...] 

[ERROR] Failed to execute goal on project child-alpha: Could not resolve dependencies for project acme:child-alpha:jar:1.0: [...] 

Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project acme:child-alpha:jar:1.0: [...] 

Caused by: org.sonatype.aether.collection.DependencyCollectionException: Failed to collect dependencies for [...] 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:258) 
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:308) 
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:150) 
    ... 23 more 
Caused by: org.sonatype.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for acme:child-dep-jdk15:jar:1.0 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:331) 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:186) 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.process(DefaultDependencyCollector.java:412) 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:240) 
    ... 25 more 
Caused by: org.apache.maven.model.resolution.UnresolvableModelException: Could not find artifact acme:acme-parent:pom:1 in acme-repo (http://maven.my-own-repo.com) 
    at org.apache.maven.repository.internal.DefaultModelResolver.resolveModel(DefaultModelResolver.java:126) 
    at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:813) 
    at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:664) 
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:310) 
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:232) 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:322) 
    ... 28 more 
Caused by: org.sonatype.aether.resolution.ArtifactResolutionException: Could not find artifact acme:acme-parent:pom:1 in acme-repo (http://maven.my-own-repo.com) 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:538) 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:216) 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:193) 
    at org.apache.maven.repository.internal.DefaultModelResolver.resolveModel(DefaultModelResolver.java:122) 
    ... 33 more 
Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not find artifact acme:acme-parent:pom:1 in acme-repo (http://maven.my-own-repo.com) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:947) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:941) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:669) 
    at org.sonatype.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:60) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 

Während Maven 2, habe ich benötigt nie die acme-parent pom.xml an folgender Stelle: http://maven2.my-own-repo.com/acme/acme-parent/1/acme-parent-1.pom

der Grund, warum wir auf unsere eigenen Repo haben nicht die Eltern pom.xml ist dass wir ein Skript haben, das beim Erstellen von Versi verwendet wird Auf Control-Zweigen, die einige Werte in acme-parent pom.xml ändern, je nachdem, auf welchem ​​Zweig wir uns befinden, daher wäre es kompliziert, diese pom.xml im Repo zu speichern und sie für alle Zweige, die wir sind, korrekt zu aktualisieren versuchen, gleichzeitig mit unserem Continuous Integration Server zu bauen. In Maven 2 würde Maven beim Maven von builds von Kind-Alpha keine Probleme haben, acme-parent pom.xml ein Verzeichnis hoch zu finden, dh mit einem relativen Pfad von ../pom.xml, also würde es nie versuchen gehe zu meinen Repositorien, um es zu finden. Die Eltern pom.xml in meinem lokalen Checkout nur und nicht im Repo hatte in Maven 2 gut funktioniert.

Allerdings, wenn ich versuchte, Kind-Alpha unter Maven 3.0.4, die Ausnahme oben aufgetreten. Zuerst dachte ich, ich müsste explizit den relativen Pfad innerhalb der Tags oben in der pom.xml von Kind-Alpha setzen, aber das hat es nicht behoben - und pom.xml von acme-parent ist tatsächlich bereits im Standard-relativen Pfad von ../pom.xml, so dass es nicht explizit festgelegt werden muss.

Dann habe ich versucht, die Abhängigkeit child-dep-jdk15 innerhalb des Abschnitts pom.xml von child-alphas auskommentieren. Der Kind-Alpha-Maven-Build wird erfolgreich abgeschlossen, wobei diese Abhängigkeit auskommentiert ist.

Ich verstehe nicht, warum Kind-Alpha in Maven 3 nicht bauen wird, wenn die Abhängigkeit child-dep-jdk15 vorhanden ist. Wenn Maven den acme-parent pom.xml zu Beginn korrekt finden konnte (pro Block am Anfang), warum versucht er nun, ihn aus den Repos herunterzuladen, wenn er die Abhängigkeit child-dep-jdk15 verarbeitet? Habe ich etwas falsch konfiguriert, und wenn ja, wie soll ich das beheben?

Eine andere Sache: Wenn ich zuerst im selben Verzeichnis wie die pom.xml von acme-parent ausführen und dann versuchen, child-alpha aufzubauen, dann ist die Kind-Alpha-Konstruktion erfolgreich, auch wenn die Abhängigkeit Kind-dep- jdk15 im Code. Nachdem ich diesen Befehl ausgeführt habe, kann ich überprüfen, ob sich acme-parent-1.pom in meinem lokalen .m2-Verzeichnis befindet. Während diese Problemumgehung für einzelne Entwickler in Ordnung sein kann, wäre dies ein Problem für unseren Continuous Integration Server, der gleichzeitige Builds für verschiedene Zweige ausführen muss.

Ich würde es vorziehen, nicht mein Repository neu zu konfigurieren, um die acme-parent pom.xml aufgrund der Versionskontrolle Verzweigungsänderungen, die ich oben erwähnt habe, zu hosten.

+0

'http: //maven.my-own-repo ...' und 'Download: http: //maven2.my-own-repo ...'. Hast du zwei Sets oder Repos? –

Antwort

0

In Maven 3, wenn Sie gerade einen fehlgeschlagenen Download hatten und ihn behoben haben (z. B. durch Hochladen des JAR in ein Repository), wird der Fehler zwischengespeichert. Um eine Aktualisierung zu erzwingen, fügen Sie -U zur Befehlszeile hinzu.

Aus anderen möglichen Gründen von DependencyResolutionException siehe Maven Confluence.

Verwandte Themen