Maven Indexer
  1. Maven Indexer
  2. MINDEXER-34

Order of IndexCreator's passed to addIndexingContextForced affects whether MavenPluginArtifactInfoIndexCreator has any effect

    Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 4.1.0
    • Fix Version/s: 4.1.2
    • Labels:
      None
    • Environment:
      JDK 6, Ubuntu, Maven 3.0.3; actually Indexer 4.1.1 but that is not listed as an option here
    • Number of attachments :
      0

      Description

      While working on a utility inside NetBeans to look up all plugins using a given goal prefix, I found unreliable behavior. To investigate, I wrote a unit test that used Maven Indexer (along with some NB helper classes) that:

      1. Creates a fresh local repository.
      2. Installs a trivial "plugin" (maven-plugin POM + JAR) with just a META-INF/maven/plugin.xml containing <plugin><goalPrefix>stuff</goalPrefix></plugin>.
      3. Indexes the repository, using all available IndexCreator instances.
      4. Runs a search like ArtifactInfo.PLUGIN_PREFIX="stuff" and checks that there is one hit.

      This test passed sometimes - including always when run from the debugger - but usually failed. Eventually I found that the order of IndexCreator instances returned from the Plexus container mattered: if min preceded maven-plugin then the test passed, whereas if min followed maven-plugin then the test failed. Furthermore, despite META-INF/plexus/components.xml listing these implementations in a particular order (seemingly arbitrary at build time), the actual order returned by PlexusContainer.lookupList seemed to vary randomly from run to run.

      The problem may have to do with MinimalArtifactInfoIndexCreator.updateLegacyDocument, which does something with PLUGIN_PREFIX and PLUGIN_GOALS for reasons unclear to me. When the creators were in the "wrong" order, http://code.google.com/p/luke/ confirmed that px and gx fields were just not present.

      I can work around this issue in the NetBeans code which indexes the local repository, using a hardcoded list of indexers (or rather, indexer IDs) as AbstractIndexCreatorHelper in the Indexer test sources does. But that does not help for downloaded remote indices, which might have been created by a faulty version of Indexer - since NexusIndexerCli.getIndexers uses lookupList when --type full is used. This means that any queries about plugin prefixes or goals may return results only for plugins which happen to have been downloaded locally. Indeed this is exactly what seems to happen when I try it, i.e. the Central index I am getting (via a proxy in Nexus 1.9.1.1) has no PLUGIN_* fields.

      The less desirable workaround would be to run a search on ArtifactInfo.PACKAGING="maven-plugin", and for each hit, download the actual JAR and parse plugin.xml myself.

      I am not sure whether the position of MavenArchetypeArtifactInfoIndexCreator also matters, but it seems plausible, since it overrides a field normally stored in MinimalArtifactInfoIndexCreator.

        Activity

        Hide
        Tamás Cservenák added a comment -
        Show
        Tamás Cservenák added a comment - Fixed in rev1158739 http://svn.apache.org/viewvc?view=revision&revision=1158739
        Hide
        Jesse Glick added a comment - - edited

        Would be more compatible to (re-)introduce:

        protected AbstractIndexCreator() {
            this( getClass().getName() );
        }
        
        Show
        Jesse Glick added a comment - - edited Would be more compatible to (re-)introduce: protected AbstractIndexCreator() { this ( getClass().getName() ); }
        Hide
        Jesse Glick added a comment -

        Also, vararg String... would be friendlier than List<String> for specifying the dependencies.

        Show
        Jesse Glick added a comment - Also, vararg String... would be friendlier than List<String> for specifying the dependencies.

          People

          • Assignee:
            Tamás Cservenák
            Reporter:
            Jesse Glick
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: