web-dev-qa-db-ja.com

mavenが依存関係を解決できない

マルチモジュールのmavenプロジェクトがあります。サイトを構築しようとすると、実行maven site親プロジェクトでは、モジュールの1つへの依存関係を解決できません。しかし、もし私がコンパイルすれば(mvn clean compile親プロジェクトで)またはテストを実行(mvn clean test on親プロジェクト)依存関係の問題はありません。

何がそのような行動を引き起こす可能性がありますか?

[〜#〜]更新[〜#〜]

Mavenバージョン

Apache Maven 3.0.2 (r1056850; 2011-01-09 02:58:10+0200)
Java version: 1.6.0_26, vendor: Sun Microsystems Inc.
Java home: c:\Program Files\Java\jdk1.6.0_26\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", Arch: "AMD64", family: "windows"

maven-site-pluginバージョン

[DEBUG]   Included: org.Apache.maven.plugins:maven-site-plugin:jar:2.0.1

エラーメッセージ

[ERROR] Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.Java:190)
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.Java:104)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.Java:258)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:201)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.Java:183)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:161)
    at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:319)
    at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:156)
    at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:534)
    at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)
    at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: org.Apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.Apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.Java:156)
    at org.Apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.Java:165)
    ... 22 more
Caused by: org.sonatype.aether.resolution.ArtifactResolutionException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.Java:526)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveArtifacts(DefaultRepositorySystem.Java:304)
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.Java:334)
    at org.Apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.Java:150)
    ... 23 more
Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.Java:517)
    ... 26 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :myproj-client
13

私は同じ問題を抱えています。 Mavenのソースコードをあまり詳しく調べていません。しかし、これが私の観察です。

ローカルリポジトリでmvn installmyproj-commonを実行したり、リモートリポジトリにデプロイしたりしないと仮定します。親プロジェクトでmvn clean siteを実行すると、次のようになります。

  1. mavenは、依存関係に従ってmyproj-commonの前にmyproj-clientの順序を決定します
  2. mvn clean sitemyproj-commonで実行されます。 myproj-common/targetの以前の結果はすべて削除され、myproj-common/target/siteが生成されます。 (この手順の後、コンパイルされたクラスもパッケージ化されたjarもmyproj-common/targetに存在しないことに注意してください)
  3. mvn clean sitemyproj-clientで実行されます。 Mavenは最初にこのプロジェクトの依存関係をチェックし、次の場所でmyproj-commonのアーティファクト(クラスまたはjar)を見つけようとします:(a)myproj-common/target (b)ローカルリポジトリ(3)リモートリポジトリ。
  4. mvn sitemyproj-clientで失敗します。これはmyproj-commonのアーティファクトが見つからないためです。

これは、mvn clean compile siteおよびmvn clean package siteが機能する理由を説明しています。どちらも、mvn sitemyproj-clientで実行される前に、ターゲットディレクトリにmyproj-commonアーティファクトを準備していたはずです。

また、mvn installの後にmvn siteを続けても機能します。

特別な例外は、emma-maven-pluginのようなものをレポートに追加すると、クラスが自動的にコンパイルおよび計測されることです。この場合、mvn clean siteは常に機能します。

Mavenがステップ3でmyproj-commonのjarを見つけようとする理由がわかりません。mvn siteとは何の関係もないようです。例外は、maven-site-pluginに入る前のmavenコアのかなり早い段階で発生します。これは、maven-site-pluginの問題ではなく、すべてのmavenライフサイクルの共通の動作のように見えます(cleanを除く)。

12
Achi Chen

私は同じに直面していましたが、StrutsとPaypal_base依存関係については、次のようにして修正しました。

  1. チェックしたところ、jarファイルがmavenリポジトリ(.m2/reposotory ....)の適切なフォルダーに存在しないことがわかりました。
  2. 次のmvnコマンドを使用してそのjarファイルをインストールしました

    mvn install:install-file -Dfile = C:\ Dependencies\Paypal_base.jar\-DgroupId = Paypal -DartifactId = Paypal_base -Dversion = 0.1\-Dpackaging = jar

そして

mvn install:install-file -Dfile=C:\Dependencies\struts.jar \
  -DgroupId=struts -DartifactId=struts -Dversion=0.1 \
  -Dpackaging=jar

(-DFileはシステム内のjarファイルの場所です)

  1. Mavenでプロジェクトを再構築します。
  2. 私のプロジェクトは成功したビルドでした。

jarを確認する必要があります。上記の使用方法はjarが存在しないことを示しています。これは役立つでしょう。

4

これは、リアクターにアクセスできないサイトプラグインの問題である可能性があり、プロジェクトのアーティファクトがプロジェクトソースで利用可能であることがわかりません。 (これは単なる仮説であり、おそらく MSITE-302 によってサポートされます。)

まずアーティファクトをローカルリポジトリにインストールするmvn installを実行してから、mvn siteを実行してみてください。

Reactorの詳細については、次を試してください。

3
Emil Sit

なんらかの理由で、モジュールと親のpomファイルに変更を加えた後、問題は消えました。何が行われたのか正確にはわかりませんが、現在mvn site親プロジェクトは正常に動作しています。残念ながら、問題の原因を調査する時間はありません。しかし、サイトのバージョンを3.0に変更すると、正しい方向に進んだようです。また、私は次のようにして(修正される前の)サイトを実行できましたmvn compile site、この場合、依存関係を見つけることができます。

1

Mavenがリポジトリーでmyproj-common:jar:0.0.1-SNAPSHOTを探しているようです。

失敗の理由として、mavenがリポジトリー内のスナップショットアーティファクトにアクセスできないことが考えられます。

スナップショットアーティファクトを有効にするには:

リポジトリセクションの下にあるsnapshotsタグのpom.xmlを確認してください。

<repository>
   <name>xyz</name>
   <id>repoid</id>
   <url>http://x.y.z</url>
   <releases>
       <enabled>true</enabled>
   </releases>
   <snapshots>
       <enabled>true</enabled>
   </snapshots>
</repository>
0
Karthik