2012-04-10 12 views
2

私のプロジェクトをMaven 2.2.1からMaven 3.0.4にアップグレードしようとしていますが、依存関係の解決に問題があります。私はMavenのドキュメントやそれに類する記事を調べることによってこれを研究しようと一日を費やしましたが、まだ固執しています。これは私の最初の質問stackoverflowですので、うまくいけば私はここで十分にエチケットを続けた。ご協力いただきありがとうございます!Maven 2.2.1からMaven 3.0.4へのアップグレード時のDependencyResolutionException

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

また、私は自分のリポジトリに次のファイルがあります:順番に

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 

子-α/のpom.xmlにプロファイルを持って次のように

マイプロジェクト構造があります私自身のacme:child-dep-jdk15に依存しています。これは、jarファイルに別に組み込まれていて、独自の.pomファイルを持ち、子acとして同じ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> 

子-αの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> 

子-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私は(子供アルファディレクトリにいる間)、私は次のコマンドを実行した子-αを構築しようとしたエン:

mvn -U -e clean install 

をそして私は次のログメッセージとスタックトレース(削除不要なメッセージ)を得ました

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) 

のMaven 2を使用して、私は次の場所にアクメ・親のpom.xmlを必要としたことがないものの: http://maven2.my-own-repo.com/acme/acme-parent/1/acme-parent-1.pom

我々は我々自身のレポに親のpom.xmlを持っていない理由はされていますversiを作成するときに使用するスクリプトがあることコントロールブランチ上では、私たちがいるブランチに応じてacme-parent pom.xmlの値を変更するので、そのpom.xmlをリポジトリに入れて、継続的な統合サーバーと同時に構築しようとしています。

Maven 2では、child-alphaのビルドを行うとき、Mavenはacme-parent pom.xmlのディレクトリを1つ上に、つまり相対パスが../pom.xmlであるので問題ありません。それを見つけるために私のリポジトリに行く。私のローカルチェックアウトにのみ親pom.xmlを持っていて、リポジトリでそれを持っていないのはMaven 2でうまくいきました。

しかし、Maven 3.0.4でchild-alphaを構築しようとしたとき、最初は、relative-pathをchild-alphaのpom.xmlの上部にあるタグ内に明示的に設定する必要があると考えましたが、それは修正されませんでした。そして、acme-parentのpom.xmlは、 ../pom.xmlのように、明示的に設定する必要はありません。

次に、child-alphaのpom.xmlのセクション内でchild-dep-jdk15依存関係をコメントアウトしてみました。この依存関係をコメントアウトして、子 - アルファ版ビルドが正常に完了します。

child-dep-jdk15依存関係が存在する場合、child-alphaがMaven 3でビルドされない理由を理解できません。 Mavenがacme-parent pom.xmlを最初に(上部のブロックごとに)正しく見つけることができた場合、なぜchild-dep-jdk15依存関係を処理するときにreposからダウンロードしようとしているのですか?私が間違って何かを設定したのですが、もしそうなら、どうしたらいいですか?

もうひとつ:私は最初のアクメ・親ののpom.xmlと同じディレクトリにmvn -N installを実行し、子アルファを構築しようとした場合、依存関係の子-dep-を維持する場合でも、その子アルファビルドは、成功コード内のjdk15。このコマンドを実行すると、acme-parent-1.pomがローカルの.m2ディレクトリにあることを確認できます。この回避策は個々の開発者にとっては大丈夫かもしれませんが、異なるブランチに対して並行ビルドを実行する必要がある継続的な統合サーバーにとっては問題になります。

上記のバージョン管理の分岐の変更により、acme-parent pom.xmlをホストするために私のリポジトリを再構成する必要がないことを強くお勧めします。

+0

http://maven.my-own-repo ... 'と' Downloading:http://maven2.my-own-repo ... 'です。あなたは2つのセットやレポを持っていますか? –

答えて

0

Maven 3では、ダウンロードが失敗し、それを修正した場合(JARをリポジトリにアップロードするなど)、失敗をキャッシュします。リフレッシュを強制するには、-Uをコマンドラインに追加します。

DependencyResolutionExceptionの他の可能な理由については、Maven Confluenceを参照してください。

関連する問題