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

                 Key: MINDEXER-34
                 URL: https://jira.codehaus.org/browse/MINDEXER-34
             Project: Maven Indexer
          Issue Type: Bug
    Affects Versions: 4.1.0
         Environment: JDK 6, Ubuntu, Maven 3.0.3; actually Indexer 4.1.1 but 
that is not listed as an option here
            Reporter: Jesse Glick
            Priority: Critical


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}}.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to