maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Scholte (JIRA)" <j...@codehaus.org>
Subject [jira] (MRELEASE-602) Repositories defined in a profile are ignored while processing dependency management pom imports in a pom resolved from the repository
Date Fri, 09 Mar 2012 17:29:02 GMT

     [ 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

        

Mime
View raw message