[英]maven fails to resolve dependency
我有多模块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的源代码。 但这是我的观察。
假设您从未在本地存储库中mvn install
myproj-common ,也未将其部署到任何远程存储库中。 当您在父项目上运行mvn clean site
时,事情会发生如下:
mvn clean site
在myproj-common上运行。 将删除myproj-common / target中的所有先前结果,并生成myproj-common / target / site 。 (注意,在此步骤之后, myproj-common / target中既没有编译类也没有打包jar) mvn clean site
在myproj-client上运行。 Maven首先检查这个项目的依赖关系,并尝试在这些地方找到myproj-common的工件(类或jar):( a) myproj-common / target (b)本地存储库(3)远程存储库。 mvn site
在myproj-client mvn site
失败,因为它无法找到myproj-common的工件 这解释了为什么mvn clean compile site
和mvn clean package site
工作原理。 在myproj-client mvn site
运行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生命周期的常见行为(除了干净我相信)。
我面对同样的问题但是对于struts和paypal_base的依赖,我通过以下方式修复。
我已经通过以下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文件的位置)
你必须检查jar,并使用上面的说明是jar不存在。 可能这会有所帮助。
这可能是站点插件无法访问反应器的问题,因此没有看到项目源中的项目工件可用。 (这仅仅是一个假设,可能由MSITE-302支持。)
尝试运行第一个mvn install
,它将您的工件安装在本地存储库中,然后运行mvn site
。
有关反应堆的更多信息,请尝试:
嘿,由于某种原因,在我对模块和父pom文件做了一些更改之后,问题就消失了。 我不确切知道做了什么,但目前在父项目上的mvn site
正常工作。 不幸的是,我没有时间研究问题的根源是什么。 但似乎将网站版本更改为3.0会让我走上正确的道路。 我也可以通过mvn compile site
以下方式执行站点(在它修复之前),在这种情况下它可以找到依赖项。
看起来maven正在寻找myproj-common:jar:0.0.1-SNAPSHOT在存储库中。
失败的原因可能是:maven无法访问存储库中的快照工件。
要启用快照工件:
请检查存储库部分下的pom.xml for 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>
来自Apache网站 :
site:site用于为单个项目生成站点。 请注意,多模块构建中的模块站点之间的链接将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.