[ 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