maven 无法解决依赖问题

Posted

技术标签:

【中文标题】maven 无法解决依赖问题【英文标题】:maven fails to resolve dependency 【发布时间】:2011-12-08 00:34:03 【问题描述】:

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

[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

【问题讨论】:

什么版本的maven和什么版本的站点插件? @jtahlborn,用 maven 版本更新了问题。 pom 文件中没有明确定义站点插件。 如果您使用 -X 参数运行 mvn,它将吐出大量信息。这应该使您能够确定您正在使用的各种库的版本。 @jtahlborn,使用 maven 站点插件版本更新问题 你能提供确切的错误信息吗? 【参考方案1】:

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

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

启用快照工件:

请在 pom.xml 中检查存储库部分下的 snapshots 标签。

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

【讨论】:

OP 表示正常编译工作正常,所以我怀疑这是问题所在。【参考方案2】:

这可能是站点插件无法访问反应器的问题,因此在您的项目源中看不到项目工件可用。 (这只是一个假设,可能得到MSITE-302的支持。)

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

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

http://maven.apache.org/guides/mini/guide-multiple-modules.html What is the "reactor" in Maven?

【讨论】:

每个子项目都需要运行安装吗? 不,在主模块上运行它会包含子模块。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

假设您从未在本地存储库中mvn installmyproj-common,也没有将其部署到任何远程存储库。当您在父项目上运行mvn clean site 时,会发生这样的事情:

    maven 确定 myproj-common 的顺序在之前 myproj-client 根据它们的依赖关系 mvn clean sitemyproj-common 上运行。 myproj-common/target 中的所有先前结果都被删除,myproj-common/target/site 被删除 生成。 (注意,经过这一步后,myproj-common/target中不存在已编译的类和打包的jar) mvn clean sitemyproj-client 上运行。 Maven首先检查 这个项目的依赖,并试图找到 myproj-common 的 这些地方的工件(类或 jar):(a) myproj-common/target (b) 本地存储库 (3) 远程存储库。 mvn sitemyproj-client 上失败,因为它找不到 myproj-common 的工件

这解释了为什么 mvn clean compile sitemvn 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 除外)。

【讨论】:

【参考方案5】:

我也面临同样的问题,但对于 struts 和 paypal_base 依赖项,我通过以下操作解决了问题。

    我检查了一下,发现 jar 文件不存在于 maven 存储库 (.m2/reposotory....) 的相应文件夹中。

    我已经通过以下 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文件的位置)

    通过 Maven 重建项目。 我的项目已成功构建。

你必须检查jar,使用上面的指令是jar不存在。 可能这会有所帮助。

【讨论】:

以上是关于maven 无法解决依赖问题的主要内容,如果未能解决你的问题,请参考以下文章

IDEA 导入Java项目,依赖maven依赖命令(解决IDEA导入Github项目目录灰色问题,无法运行)

MAVEN 无法解决依赖关系 [重复]

Maven 无法解决依赖关系

Maven 无法解决具有多个存储库的递归依赖项

Maven 无法使用 gitlab 解决依赖关系

Maven无法解决vaadin依赖