maven无法解决依赖问题

时间:2011-10-14 19:23:24

标签: java maven dependencies dependency-management

我有多模块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"

maven-site-plugin version

[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

6 个答案:

答案 0 :(得分:12)

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

假设您从未在本地存储库中mvn install myproj-common ,而是将其部署到任何远程存储库中。在父项目上运行mvn clean site时,会发生如下情况:

  1. maven确定 myproj-common 之前的顺序 根据他们的依赖关系 myproj-client
  2. mvn clean site myproj-common 上运行。 myproj-common / target 中之前的所有结果都将被删除, myproj-common / target / site 是 产生。 (注意,在此步骤之后, myproj-common / target 中既没有编译类也没有打包jar)
  3. mvn clean site myproj-client 上运行。 Maven首先检查了 该项目的依赖项,并尝试查找 myproj-common 这些地方的工件(类或jar):( a) myproj-common / target (b)本地存储库(3)远程存储库。
  4. mvn site myproj-client 上失败,因为它无法找到 myproj-common 的工件
  5. 这解释了为什么mvn clean compile sitemvn clean package site有效。在 myproj-client 上运行mvn site之前,他们都会在目标目录中准备 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 我相信)。

答案 1 :(得分:3)

这可能是网站插件无法访问反应堆的问题,因此没有看到项目源中存在项目工件。 (这只是一个假设,可能由MSITE-302支持。)

首先尝试运行mvn install,它会在本地存储库中安装您的工件,然后运行mvn site

有关反应堆的更多信息,请尝试:

答案 2 :(得分:3)

我面对同样的问题,但对于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 =罐

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

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

    1. 由Maven重建项目。
    2. 我的项目成功构建。
    3. 你必须检查jar,并使用上面的说明是jar不存在。 可能这会有所帮助。

答案 3 :(得分:1)

嘿,由于某种原因,在我对模块和父pom文件做了一些更改之后,问题就消失了。我不确切知道做了什么,但目前父项目mvn site正常工作。不幸的是,我没有时间研究问题的根源是什么。但似乎将网站版本更改为3.0会让我走上正确的道路。我也可以通过以下方式mvn compile site执行网站(在修复之前),在这种情况下,它可以找到依赖。

答案 4 :(得分:0)

看起来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>

答案 5 :(得分:-2)

来自Apache website

  

site:site用于为单个项目生成站点。请注意,多模块构建中的模块站点之间的链接将不起作用。