Snapshot plugins cannot be resolved correctly with java6
--------------------------------------------------------
Key: MNG-2793
URL: http://jira.codehaus.org/browse/MNG-2793
Project: Maven 2
Issue Type: Bug
Components: Artifacts and Repositories, Dependencies
Affects Versions: 2.0.4
Reporter: Daniel Kulp
Attachments: maven-artifact-manager.patch
With java 6, builds that use snapshot repositories are consistently failing if
the snapshots are not available in the local repository. The error is
something like:
[INFO]
----------------------------------------------------------------------------
[DEBUG] Retrieving parent-POM: org.apache.maven.plugins:maven-plugins::1 for
project: null:maven-site-plugin:maven-plugin:2.0-beta-5 from the repository.
[DEBUG] Retrieving parent-POM: org.apache.maven:maven-parent::1 for project:
org.apache.maven.plugins:maven-plugins:pom:1 from the repository.
[DEBUG] Retrieving parent-POM: org.apache:apache::1 for project:
org.apache.maven:maven-parent:pom:1 from the repository.
[DEBUG] maven-install-plugin: using locally installed snapshot
[DEBUG] maven-install-plugin: resolved to version 2.2-SNAPSHOT from repository
central
[DEBUG] Skipping disabled repository central
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).
Project ID: org.apache.maven.plugins:maven-install-plugin
Reason: Error getting POM for 'org.apache.maven.plugins:maven-install-plugin'
from the repository: Failed to resolve artifact, possibly due to a repository
list that is not appropriately equipped for this artifact's metadata.
org.apache.maven.plugins:maven-install-plugin:pom:2.2-SNAPSHOT
from the specified remote repositories:
apache.snapshots (http://people.apache.org/repo/m2-snapshot-repository),
central (http://repo1.maven.org/maven2)
If the artifacts are first downloaded by building with JDK 1.5, everything
works fine.
After investigating, the problem is in the transforms that the
maven-artifact-manager. With JDK 1.5, the order they run is:
org.apache.maven.artifact.transform.LatestArtifactTransformation
org.apache.maven.artifact.transform.ReleaseArtifactTransformation
org.apache.maven.artifact.transform.SnapshotTransformation
but with Java 6, for some reason, the order is:
org.apache.maven.artifact.transform.SnapshotTransformation
org.apache.maven.artifact.transform.LatestArtifactTransformation
org.apache.maven.artifact.transform.ReleaseArtifactTransformation
The LatestArtifactTransform is what uses to the metadata to determine
the "actual" version number (for the install plugin, 2.2-SNAPSHOT). The
SnapshotTransform then converts that to 2.2-20061118.060401-2 which is what
is then downloaded. However, in the java 6 case, the SnapshotTransform is
run first and since the version is not a "SNAPSHOT" version number, it
doesn't do any processing so then the downloading ends up looking for
2.2-SNAPSHOT, not the full version, which then fails.
I chatted with brett_ on IRC about this:
[09:46:35] <dkulp> OK. I'm trying to track down why my builds are failing
with JDK 1.6
[09:46:53] <dkulp> The issue is the transforms are in a different order with
1.6 than 1.5
[09:47:17] <brett_> yikes
[09:47:42] <dkulp> With 1.5, its Latest/Release/Snapshot.
[09:47:46] <brett_> not sure why that would matter. But I guess sorting the
transforms consistently would help.
[09:47:50] <dkulp> With 1.6, it's Snapshot/Latest/Release
[09:48:06] <brett_> ok, fairly simple to fix in Maven.
[09:48:10] <dkulp> The Latest needs to be before Snapshot.
[09:49:08] <dkulp> I tried changing the order of things in the components.xml.
Didn't seem to change anything. But this is plexus stuff which I don't know
anything about.
[09:49:22] <brett_> hmm, it should be populated as a list
[09:49:28] <brett_> but maybe the list is backed by a map
[09:49:35] <dkulp> Yep. Verified it's and ArrayList
[09:49:51] <brett_> s/backed/populated by/
[09:50:48] <dkulp> That would definitely do it.
[09:51:21] <dkulp> Any hints on where to look?
[09:51:48] <brett_> oh, I would go into plexus
[09:51:52] <dkulp> (or how to debug)?
[09:51:58] <brett_> sorry, wouldn't
[09:52:13] <brett_> it's changing too much
[09:52:18] <brett_> 2.0.5 will be stuck with alpha-10
[09:52:24] <brett_> so, need to work around it in Maven
[09:53:00] <brett_> perhaps just hack the order in the code, and then fix
plexus to honour the order in components.xml in trunk
[09:54:57] <dkulp> Hmm.. ok. Is there something plexus will call after
setting the List field so I can resort it?
[09:55:30] <dkulp> Or will adding a "setArtifactTransformations(List)" work?
[09:55:40] <dkulp> (again, not familiar with plexus)
[09:56:25] <brett_> no, it sets it using private field injection
[09:57:04] <dkulp> No optional "init" methods or anything that are called
after everything is done?
[09:57:42] <brett_> you can implement Initializable and modify them then
[09:57:50] <brett_> but you could just as easily do that inside the method
using it
[09:58:08] <dkulp> There are 4 methods using it that are called to resolve
every artifact.
[09:58:24] <dkulp> Sorry, 3.
[09:58:37] <dkulp> Kind of just wanted to sort once, not for each artifact.
[09:58:46] <brett_> but the transformations should just exist in one class, and
only used in one place, IIRC
[10:06:46] <dkulp> brett_: thanks. That actually works.
The attached patch forces the "Snapshot" transform to the end of the list.
It's definitely not ideal. Ideally, plexus would be fixed to honor ordering,
but if plexus is in a state of flux, that might not be doable.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira