Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-2793

Snapshot plugins cannot be resolved correctly with java6

    XMLWordPrintableJSON

Details

    Description

      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.

      Attachments

        1. maven-artifact-manager.patch
          2 kB
          Daniel Kulp

        Issue Links

          Activity

            People

              jvanzyl Jason van Zyl
              dkulp Daniel Kulp
              Votes:
              3 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: