[ 
https://jira.codehaus.org/browse/MRELEASE-602?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Scholte updated MRELEASE-602:
------------------------------------

    Description: 
We define the repositories in a profile.

The dependency management resolution fails to resolve a pom import if the 
import occurs 
in an imported pom not found in the reactor.  

The following code fragment shows the problem: 

        While merging managed dependencies of a dependency resolved from the 
repository, 
        the {{ProjectBuilderConfiguration}} that is used do not contain the 
{{ProfileManager}}.  
   

{code:title=org.apache.maven.project.DefaultMavenProjectBuilder.java}
mergeManagedDependencies(...) 

...
                    if ( dep.getType().equals( "pom" )
                         && Artifact.SCOPE_IMPORT.equals( dep.getScope() ) )
                    {
                        Artifact artifact = 
artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
                                                                                
  dep.getVersion(), dep.getScope() );
                        MavenProject project = buildFromRepository(artifact, 
parentSearchRepositories, localRepository, false);

                        DependencyManagement depMgmt = 
project.getDependencyManagement();

...


buildFromRepository(...) 

...
        Model model = findModelFromRepository( artifact, 
remoteArtifactRepositories, localRepository, allowStubModel );

        ProjectBuilderConfiguration config = new 
DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );

        return buildInternal( "Artifact [" + artifact + "]", model, config, 
remoteArtifactRepositories,
                              null, false );



buildInternal( ... )

...
        ProfileManager externalProfileManager = 
config.getGlobalProfileManager();

...

        Set aggregatedRemoteWagonRepositories = new LinkedHashSet();

        List activeExternalProfiles;

            if ( externalProfileManager != null )
            {
                activeExternalProfiles = 
externalProfileManager.getActiveProfiles();
            }
            else
            {
                activeExternalProfiles = Collections.EMPTY_LIST;
            }


        for ( Iterator i = activeExternalProfiles.iterator(); i.hasNext(); )
        {
            Profile externalProfile = (Profile) i.next();

            for ( Iterator repoIterator = 
externalProfile.getRepositories().iterator(); repoIterator.hasNext(); )
            {
                Repository mavenRepo = (Repository) repoIterator.next();

                ArtifactRepository artifactRepo = artifactRepo =
                        ProjectUtils.buildArtifactRepository( mavenRepo, 
artifactRepositoryFactory, container );

                aggregatedRemoteWagonRepositories.add( artifactRepo );
            }
        }
{code}

Because the {{GlobalProfileManager}} was not specified in the 
{{DefaultProjectBuilderConfiguration}}, 
the activeExternalProfiles list is empty and all "remote repositories" are 
ignored. 



In general, the {{ProjectBuilderConfiguration}} is created with a factory 
method which correctly set the {{GlobalProfileManager}}. 

{code:title=org.apache.maven.execution.DefaultMavenExecutionRequest.java}

    public ProjectBuilderConfiguration getProjectBuilderConfiguration()
    {
        ProjectBuilderConfiguration config = new 
DefaultProjectBuilderConfiguration();
        config.setLocalRepository( getLocalRepository() )
              .setGlobalProfileManager( getGlobalProfileManager() )
              .setExecutionProperties( getExecutionProperties() )
              .setUserProperties( getUserProperties() )
              .setBuildStartTime( startTime );

        return config;
    }
{code}


  was:
We define the repositories in a profile.

The dependency management resolution fails to resolve a pom import if the 
import occurs 
in an imported pom not found in the reactor.  

The following code fragment shows the problem: 

        While merging managed dependencies of a dependency resolved from the 
repository, 
        the ProjectBuilderConfiguration that is used do not contain the 
ProfileManager.  
   


Class: org.apache.maven.project.DefaultMavenProjectBuilder

mergeManagedDependencies(...) 

...
                    if ( dep.getType().equals( "pom" )
                         && Artifact.SCOPE_IMPORT.equals( dep.getScope() ) )
                    {
                        Artifact artifact = 
artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
                                                                                
  dep.getVersion(), dep.getScope() );
                        MavenProject project = buildFromRepository(artifact, 
parentSearchRepositories, localRepository, false);

                        DependencyManagement depMgmt = 
project.getDependencyManagement();

...


buildFromRepository(...) 

...
        Model model = findModelFromRepository( artifact, 
remoteArtifactRepositories, localRepository, allowStubModel );

        ProjectBuilderConfiguration config = new 
DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );

        return buildInternal( "Artifact [" + artifact + "]", model, config, 
remoteArtifactRepositories,
                              null, false );



buildInternal( ... )

...
        ProfileManager externalProfileManager = 
config.getGlobalProfileManager();

...

        Set aggregatedRemoteWagonRepositories = new LinkedHashSet();

        List activeExternalProfiles;

            if ( externalProfileManager != null )
            {
                activeExternalProfiles = 
externalProfileManager.getActiveProfiles();
            }
            else
            {
                activeExternalProfiles = Collections.EMPTY_LIST;
            }


        for ( Iterator i = activeExternalProfiles.iterator(); i.hasNext(); )
        {
            Profile externalProfile = (Profile) i.next();

            for ( Iterator repoIterator = 
externalProfile.getRepositories().iterator(); repoIterator.hasNext(); )
            {
                Repository mavenRepo = (Repository) repoIterator.next();

                ArtifactRepository artifactRepo = artifactRepo =
                        ProjectUtils.buildArtifactRepository( mavenRepo, 
artifactRepositoryFactory, container );

                aggregatedRemoteWagonRepositories.add( artifactRepo );
            }
        }


Because the GlobalProfileManager was not specified in the 
DefaultProjectBuilderConfiguration, 
the activeExternalProfiles list is empty and all "remote repositories" are 
ignored. 



In general, the ProjectBuilderConfiguration is created with a factory method 
which correctly set the GlobalProfileManager. 


org.apache.maven.execution.DefaultMavenExecutionRequest

    public ProjectBuilderConfiguration getProjectBuilderConfiguration()
    {
        ProjectBuilderConfiguration config = new 
DefaultProjectBuilderConfiguration();
        config.setLocalRepository( getLocalRepository() )
              .setGlobalProfileManager( getGlobalProfileManager() )
              .setExecutionProperties( getExecutionProperties() )
              .setUserProperties( getUserProperties() )
              .setBuildStartTime( startTime );

        return config;
    }



    
> Repositories defined in a profile are ignored while processing dependency 
> management pom imports in a pom resolved from the repository
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MRELEASE-602
>                 URL: https://jira.codehaus.org/browse/MRELEASE-602
>             Project: Maven 2.x Release Plugin
>          Issue Type: Bug
>          Components: prepare
>    Affects Versions: 2.0
>            Reporter: Pedro Rodriguez
>
> We define the repositories in a profile.
> The dependency management resolution fails to resolve a pom import if the 
> import occurs 
> in an imported pom not found in the reactor.  
> The following code fragment shows the problem: 
>       While merging managed dependencies of a dependency resolved from the 
> repository, 
>       the {{ProjectBuilderConfiguration}} that is used do not contain the 
> {{ProfileManager}}.  
>    
> {code:title=org.apache.maven.project.DefaultMavenProjectBuilder.java}
> mergeManagedDependencies(...) 
> ...
>                     if ( dep.getType().equals( "pom" )
>                          && Artifact.SCOPE_IMPORT.equals( dep.getScope() ) )
>                     {
>                         Artifact artifact = 
> artifactFactory.createProjectArtifact( dep.getGroupId(), dep.getArtifactId(),
>                                                                               
>     dep.getVersion(), dep.getScope() );
>                         MavenProject project = buildFromRepository(artifact, 
> parentSearchRepositories, localRepository, false);
>                         DependencyManagement depMgmt = 
> project.getDependencyManagement();
> ...
> buildFromRepository(...) 
> ...
>         Model model = findModelFromRepository( artifact, 
> remoteArtifactRepositories, localRepository, allowStubModel );
>         ProjectBuilderConfiguration config = new 
> DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
>         return buildInternal( "Artifact [" + artifact + "]", model, config, 
> remoteArtifactRepositories,
>                               null, false );
> buildInternal( ... )
> ...
>         ProfileManager externalProfileManager = 
> config.getGlobalProfileManager();
> ...
>         Set aggregatedRemoteWagonRepositories = new LinkedHashSet();
>         List activeExternalProfiles;
>             if ( externalProfileManager != null )
>             {
>                 activeExternalProfiles = 
> externalProfileManager.getActiveProfiles();
>             }
>             else
>             {
>                 activeExternalProfiles = Collections.EMPTY_LIST;
>             }
>         for ( Iterator i = activeExternalProfiles.iterator(); i.hasNext(); )
>         {
>             Profile externalProfile = (Profile) i.next();
>             for ( Iterator repoIterator = 
> externalProfile.getRepositories().iterator(); repoIterator.hasNext(); )
>             {
>                 Repository mavenRepo = (Repository) repoIterator.next();
>                 ArtifactRepository artifactRepo = artifactRepo =
>                         ProjectUtils.buildArtifactRepository( mavenRepo, 
> artifactRepositoryFactory, container );
>                 aggregatedRemoteWagonRepositories.add( artifactRepo );
>             }
>         }
> {code}
> Because the {{GlobalProfileManager}} was not specified in the 
> {{DefaultProjectBuilderConfiguration}}, 
> the activeExternalProfiles list is empty and all "remote repositories" are 
> ignored. 
> In general, the {{ProjectBuilderConfiguration}} is created with a factory 
> method which correctly set the {{GlobalProfileManager}}. 
> {code:title=org.apache.maven.execution.DefaultMavenExecutionRequest.java}
>     public ProjectBuilderConfiguration getProjectBuilderConfiguration()
>     {
>         ProjectBuilderConfiguration config = new 
> DefaultProjectBuilderConfiguration();
>         config.setLocalRepository( getLocalRepository() )
>               .setGlobalProfileManager( getGlobalProfileManager() )
>               .setExecutionProperties( getExecutionProperties() )
>               .setUserProperties( getUserProperties() )
>               .setBuildStartTime( startTime );
>         return config;
>     }
> {code}

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