Kirk Rasmussen created MNG-5435:
-----------------------------------
Summary: Project which has shared dependency with a plugin fails
to recognize artifact was downloaded and fails.
Key: MNG-5435
URL: https://jira.codehaus.org/browse/MNG-5435
Project: Maven 2 & 3
Issue Type: Bug
Components: Artifacts and Repositories, Dependencies
Affects Versions: 3.0.4
Reporter: Kirk Rasmussen
Priority: Blocker
Attachments: maven2.log, maven.log, pom.xml, settings.xml, simple.zip
This is a twofer bug report :)
Issue #1:
I have included a stripped down version of an example using the maven antrun
plugin to spawn the Antlr tool. For technical reasons we cannot use the native
maven Antlr plugin.
If you look at the attached project you will see that Antlr is a dependency of
both the antrun plugin:
{code}
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
<version>${antlr.version}</version>
</dependency>
...
{code}
And the project itself:
{code}
...
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
</dependency>
</dependencies>
...
{code}
Starting with a blank M2 local repo, and then running
$ mvn -e -X -U clean install -s settings.xml > /tmp/maven.log
Results in failure:
Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not
find artifact org.antlr:antlr:jar:3.4
However this artifact was indeed downloaded (first as a project dependency). I
stepped through some of the Maven code and it appears to fail during the second
run through org.sonatype.aether.impl.internal.DefaultArtifactResolver#resolve
as a plugin dependency.
I strongly suspect it has to do with how
org.sonatype.aether.impl.internal.EnhancedLocalRepositoryManager#find is
implemented. It sees the file but it is not being tracked correctly I believe
so it ignores it.
If you run the build a second time it will then succeed because the Antlr
artifacts will be available as they are in the local repo from the previous run.
$ mvn -e -X -U clean install -s settings.xml > /tmp/maven2.log
I observed the exact same problem when using the Maven enforcer plugin along
with TestNG as they both depend on beanshell and with the Maven GWT plugin and
GWT project dependencies.
This was discovered as an issue once we started clearing out our local repo.
Once the artifacts are populated locally the issue goes away. It takes a couple
of runs to get past the bogus "missing artifact" errors but after that it is
ok. It's difficult to predict when it will fail w/o being intimately familiar
with all plugin/project dependencies per project.
I noticed that having Antlr 3.0.4 only as plugin dependency works fine. It also
works fine if it's only a project dependency. It's the combination of having it
both as a plugin AND a project dependency causes this problem.
#2
My first thought to get around issue #1 was to use dependency:resolve as a
pre-build step after cleaning the local repo but that doesn't full solve the
problem.
Using the Mavan dependency:resolve and dependency:resolve-plugins goals
partially sidesteps issue #1 but it still gets confused about inter-module
dependencies.
For example I have a simple multi-module project that includes: foo-module,
bar-module, and baz-module (see simple.zip).
Running:
$ mvn dependency:resolve dependency:resolve-plugins -s settings.xml
Results in a build failure on the baz-module:
[INFO] acme-pom .......................................... SUCCESS [6.835s]
[INFO] foo-module ........................................ SUCCESS [1.327s]
[INFO] bar-module ........................................ SUCCESS [0.090s]
[INFO] baz-module ........................................ FAILURE [0.012s]
This seems to avoid issue #1 as it doesn't complain about missing Antlr
artifacts anymore but it gets stuck on the baz-module with the error:
[ERROR] Failed to execute goal on project baz-module: Could not resolve
dependencies for project com.acme:baz-module:jar:4.0.0-SNAPSHOT: The following
artifacts could not be resolved: com.acme:foo-module:jar:4.0.0-SNAPSHOT,
com.acme:bar-module:jar:4.0.0-SNAPSHOT: Could not find artifact
com.acme:foo-module:jar:4.0.0-SNAPSHOT -> [Help 1]
In our real projects there are many more modules which don't get resolved after
this first failure so the local repo becomes only partially populated.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira