José Pedro Pereira created MASSEMBLY-600:
--------------------------------------------

             Summary: ModuleSets incorrectly detected with 
useAllReactorProjects while aggregating modules with parents differing from the 
aggregator
                 Key: MASSEMBLY-600
                 URL: https://jira.codehaus.org/browse/MASSEMBLY-600
             Project: Maven 2.x Assembly Plugin
          Issue Type: Bug
    Affects Versions: 2.3, 2.2.2, 2.2
         Environment: Maven 2.2.1
            Reporter: José Pedro Pereira
            Priority: Blocker
         Attachments: child-aggregator.zip

In two multi-module project setups like the ones attached to the bug where:

root-aggregator (type=pom -> aggregator as well as extension)
 |
 |___(module)___ root-type1 (type=pom -> only for extension)
 |
 |___(module)___ assembler (type=pom -> uses maven-assembly-plugin with 
shared-assembly-defs dependency)
 |
 |___(module)___ shared-assembly-defs (type=jar)
                         |
                         
|____/src/main/resources/assemblies/assemblydefinition.xml
                                                |
                                                |____________ moduleSets -> 
moduleSet (useAllReactorProjects=true) -> binaries

and another multi-module project with these characteristics:

child-aggregator (parent=root-aggregator for inheritance)
    |
    |____(module)___ child-assembler (parent=root.assembler for inheritance of 
maven-assembly-plugin)
    |
    |____(module)___ child-type1 (parent=root-type1 for inheritance of 
dependencies and plugins config)
 

The assembly zip in the child-aggregator/child-assembler project does not 
contain the jar from child-type1 even though it is in the reactor projects 
list...

I was able to trace the problem back to the class:

org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase


method:

public static Set<MavenProject> getModuleProjects( final ModuleSet moduleSet,
                                                       final 
AssemblerConfigurationSource configSource,
                                                       final Logger logger )

where the code reads:

        if ( moduleSet.isUseAllReactorProjects() ) <--- we are in this case 
because our assembly descriptor says so!
        {
            if ( !moduleSet.isIncludeSubModules() ) <-- In the case that shows 
the bug this is not defined - default is true
            {
                moduleProjects = new LinkedHashSet<MavenProject>( 
configSource.getReactorProjects() );
            }

            project = configSource.getReactorProjects().get( 0 ); <-- first 
project in the reactor order gets chosen... why?
        }

        if ( moduleProjects == null )
        {
            try
            {
                moduleProjects =
                    ProjectUtils.getProjectModules( project, 
configSource.getReactorProjects(),
                                                    
moduleSet.isIncludeSubModules(), logger ); 
                    <-- here if finds all modules of "first in the reactor" 
project
            }
            catch ( final IOException e )
            {
                throw new ArchiveCreationException( "Error retrieving 
module-set for project: " + project.getId()
                    + ": " + e.getMessage(), e );
            }
        }

If on the other hand (for working around the issue) one sets 
includeSubModules=false in the assembly definition (just uncomment in the 
"assembly-share" project assembly definition in the submitted example), then 
the reactor projects are used as per the top aggregator and everything goes 
well, except for the fact that another warning shows up saying that 
includeSubModules=false and useAllReactorProjects=true are incompatible and 
will be ignored (this combination is not ignored but the warning does make 
sense, though!)

This is related to the fact that in the child-aggregator project and modules, 
there is no dependency between the child-type1 project and the 
child-aggregator, which means the Reactor will order the builds as 
child-type1, child-assembler, child-aggregator

but the code actually selects child-type1 as the "project" to determine modules 
from. 


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


Reply via email to