maven无法解决依赖问题

mic*_*nko 11 java dependencies dependency-management maven

我有多模块maven项目.当我尝试构建站点时,例如maven site在父项目上执行它无法解析对其中一个模块的依赖.但是,如果我只是编译(mvn clean compile在父项目上)或运行测试(mvn clean test在父项目上),则没有依赖性问题.

什么可能导致这种行为?

UPD

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"
Run Code Online (Sandbox Code Playgroud)

maven-site-plugin版本

[DEBUG]   Included: org.apache.maven.plugins:maven-site-plugin:jar:2.0.1
Run Code Online (Sandbox Code Playgroud)

错误信息

[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
Run Code Online (Sandbox Code Playgroud)

小智 12

我也有同样的问题.我没有过多地研究Maven的源代码.但这是我的观察.

假设您从未在本地存储库中使用mvn install myproj-common,也未将其部署到任何远程存储库中.当您运行mvn clean site父项目时,事情发生如下:

  1. maven 根据它们的依赖关系确定myproj-commonmyproj-client之前的 顺序
  2. mvn clean sitemyproj-common上运行.将删除myproj-common/target中的所有先前结果,并生成myproj-common/target/site.(注意,在此步骤之后,myproj-common/target中既没有编译类也没有打包jar )
  3. mvn clean sitemyproj-client上运行.Maven首先检查这个项目的依赖关系,并尝试在这些地方找到myproj-common的工件(类或jar):( a)myproj-common/target(b)本地存储库(3)远程存储库.
  4. mvn sitemyproj-client上失败,因为它无法找到myproj-common的工件

这解释了为什么mvn clean compile sitemvn clean package site有效.在myproj-client上运行之前,他们都会在目标目录中准备myproj-common工件.mvn site

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生命周期的常见行为(我相信除了干净).


小智 5

我面临着同样的问题,但对于 struts 和 paypal_base 依赖项,我通过以下方式进行了修复。

  1. 我检查了一下,发现 jar 文件在 maven 存储库(.m2/repository ....)的适当文件夹中不存在。
  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
Run Code Online (Sandbox Code Playgroud)

(-DFile 是你系统中 jar 文件的位置)

  1. 通过Maven重建项目。
  2. 我的项目构建成功。

您必须检查 jar,并且使用上述说明是 jar 不存在。可能这会有所帮助。


小智 -1

看起来 maven 正在存储库中寻找 myproj-common:jar:0.0.1-SNAPSHOT 。

失败的原因可能是:maven 无法访问存储库中的快照工件。

要启用快照工件:

请检查 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>
Run Code Online (Sandbox Code Playgroud)