Hi Christian, Isn't it possible to add some tests here ? Also something I'm not sure to understand in the case is if the user has another profile activated AFAIR activeByDefault activates a profile only if no profile is manually activated (with activeProfiles or -P). There is often a big misunderstanding with this option.
Cheers On Thu, Feb 25, 2016 at 7:59 PM, <[email protected]> wrote: > Repository: maven > Updated Branches: > refs/heads/master 0a5351340 -> 425289c5e > > > [MNG-5984] Maven core extension resolution ignores repositories from > activeByDefault profiles in settings.xml > > > Project: http://git-wip-us.apache.org/repos/asf/maven/repo > Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/425289c5 > Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/425289c5 > Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/425289c5 > > Branch: refs/heads/master > Commit: 425289c5e21a822dc150e75fc03abcaf61473900 > Parents: 0a53513 > Author: Christian Schulte <[email protected]> > Authored: Thu Feb 25 19:46:13 2016 +0100 > Committer: Christian Schulte <[email protected]> > Committed: Thu Feb 25 19:51:13 2016 +0100 > > ---------------------------------------------------------------------- > .../SettingsXmlConfigurationProcessor.java | 157 ++++++++++++++----- > 1 file changed, 114 insertions(+), 43 deletions(-) > ---------------------------------------------------------------------- > > > > http://git-wip-us.apache.org/repos/asf/maven/blob/425289c5/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java > ---------------------------------------------------------------------- > diff --git > a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java > b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java > index 791a226..1a57baa 100644 > --- > a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java > +++ > b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java > @@ -21,6 +21,7 @@ package org.apache.maven.cli.configuration; > > import java.io.File; > import java.io.FileNotFoundException; > +import java.util.ArrayList; > import java.util.List; > > import org.apache.commons.cli.CommandLine; > @@ -31,9 +32,16 @@ import org.apache.maven.cli.CLIManager; > import org.apache.maven.cli.CliRequest; > import org.apache.maven.execution.MavenExecutionRequest; > import > org.apache.maven.execution.MavenExecutionRequestPopulationException; > +import org.apache.maven.model.Profile; > +import org.apache.maven.model.Repository; > +import org.apache.maven.model.building.DefaultModelProblem; > +import org.apache.maven.model.building.ModelProblem; > +import org.apache.maven.model.building.ModelProblemCollector; > +import org.apache.maven.model.building.ModelProblemCollectorRequest; > +import org.apache.maven.model.profile.DefaultProfileActivationContext; > +import org.apache.maven.model.profile.ProfileSelector; > import org.apache.maven.settings.Mirror; > import org.apache.maven.settings.Proxy; > -import org.apache.maven.settings.Repository; > import org.apache.maven.settings.Server; > import org.apache.maven.settings.Settings; > import org.apache.maven.settings.SettingsUtils; > @@ -51,6 +59,7 @@ import org.slf4j.Logger; > public class SettingsXmlConfigurationProcessor > implements ConfigurationProcessor > { > + > public static final String HINT = "settings"; > > public static final String USER_HOME = System.getProperty( > "user.home" ); > @@ -59,8 +68,8 @@ public class SettingsXmlConfigurationProcessor > > public static final File DEFAULT_USER_SETTINGS_FILE = new File( > USER_MAVEN_CONFIGURATION_HOME, "settings.xml" ); > > - public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File( > System.getProperty( "maven.home", System > - .getProperty( "user.dir", "" ) ), "conf/settings.xml" ); > + public static final File DEFAULT_GLOBAL_SETTINGS_FILE = > + new File( System.getProperty( "maven.home", System.getProperty( > "user.dir", "" ) ), "conf/settings.xml" ); > > @Requirement > private Logger logger; > @@ -71,6 +80,9 @@ public class SettingsXmlConfigurationProcessor > @Requirement > private SettingsDecrypter settingsDecrypter; > > + @Requirement > + private ProfileSelector profileSelector; > + > @Override > public void process( CliRequest cliRequest ) > throws Exception > @@ -88,8 +100,9 @@ public class SettingsXmlConfigurationProcessor > > if ( !userSettingsFile.isFile() ) > { > - throw new FileNotFoundException( "The specified user > settings file does not exist: " > - + userSettingsFile ); > + throw new FileNotFoundException( String.format( "The > specified user settings file does not exist: %s", > + > userSettingsFile ) ); > + > } > } > else > @@ -106,8 +119,9 @@ public class SettingsXmlConfigurationProcessor > > if ( !globalSettingsFile.isFile() ) > { > - throw new FileNotFoundException( "The specified global > settings file does not exist: " > - + globalSettingsFile ); > + throw new FileNotFoundException( String.format( "The > specified global settings file does not exist: %s", > + > globalSettingsFile ) ); > + > } > } > else > @@ -129,10 +143,13 @@ public class SettingsXmlConfigurationProcessor > request.getEventSpyDispatcher().onEvent( settingsRequest ); > } > > - logger.debug( "Reading global settings from " > - + getLocation( settingsRequest.getGlobalSettingsSource(), > settingsRequest.getGlobalSettingsFile() ) ); > - logger.debug( "Reading user settings from " > - + getLocation( settingsRequest.getUserSettingsSource(), > settingsRequest.getUserSettingsFile() ) ); > + logger.debug( String.format( "Reading global settings from %s", > + getLocation( > settingsRequest.getGlobalSettingsSource(), > + > settingsRequest.getGlobalSettingsFile() ) ) ); > + > + logger.debug( String.format( "Reading user settings from %s", > + getLocation( > settingsRequest.getUserSettingsSource(), > + > settingsRequest.getUserSettingsFile() ) ) ); > > SettingsBuildingResult settingsResult = settingsBuilder.build( > settingsRequest ); > > @@ -154,6 +171,89 @@ public class SettingsXmlConfigurationProcessor > } > logger.warn( "" ); > } > + > + // profile activation > + final DefaultProfileActivationContext profileActivationContext = > new DefaultProfileActivationContext(); > + profileActivationContext.setActiveProfileIds( > request.getActiveProfiles() ); > + profileActivationContext.setInactiveProfileIds( > request.getInactiveProfiles() ); > + profileActivationContext.setSystemProperties( > request.getSystemProperties() ); > + profileActivationContext.setUserProperties( > request.getUserProperties() ); > + profileActivationContext.setProjectDirectory( ( request.getPom() > != null ) > + ? > request.getPom().getParentFile() > + : null ); > + > + final List<ModelProblem> modelProblems = new ArrayList<>(); > + final List<Profile> activeProfiles = > + this.profileSelector.getActiveProfiles( > request.getProfiles(), profileActivationContext, > + new > ModelProblemCollector() > + { > + > + @Override > + public void add( > final ModelProblemCollectorRequest req ) > + { > + > modelProblems.add( new DefaultModelProblem( > + > req.getMessage(), req.getSeverity(), > + > req.getVersion(), "settings.xml", -1, -1, > + null, > req.getException() ) ); > + > + } > + > + } ); > + > + if ( !modelProblems.isEmpty() ) > + { > + logger.warn( "" ); > + logger.warn( "Some problems were encountered while processing > profiles" ); > + > + for ( final ModelProblem problem : modelProblems ) > + { > + logger.warn( problem.getMessage(), problem.getException() > ); > + } > + > + logger.warn( "" ); > + } > + > + if ( !activeProfiles.isEmpty() ) > + { > + for ( final Profile profile : activeProfiles ) > + { > + final List<Repository> remoteRepositories = > profile.getRepositories(); > + > + for ( final Repository remoteRepository : > remoteRepositories ) > + { > + try > + { > + request.addRemoteRepository( > + > MavenRepositorySystem.buildArtifactRepository( remoteRepository ) ); > + > + } > + catch ( final InvalidRepositoryException e ) > + { > + logger.warn( String.format( "Failure adding > repository '%s' from profile '%s'.", > + > remoteRepository.getId(), profile.getId() ), e ); > + > + } > + } > + > + final List<Repository> pluginRepositories = > profile.getPluginRepositories(); > + > + for ( final Repository pluginRepository : > pluginRepositories ) > + { > + try > + { > + request.addPluginArtifactRepository( > + > MavenRepositorySystem.buildArtifactRepository( pluginRepository ) ); > + > + } > + catch ( InvalidRepositoryException e ) > + { > + logger.warn( String.format( "Failure adding > plugin repository '%s' from profile '%s'.", > + > pluginRepository.getId(), profile.getId() ), e ); > + > + } > + } > + } > + } > } > > private MavenExecutionRequest populateFromSettings( > MavenExecutionRequest request, Settings settings ) > @@ -218,43 +318,13 @@ public class SettingsXmlConfigurationProcessor > request.addMirror( mirror ); > } > > - request.setActiveProfiles( settings.getActiveProfiles() ); > + request.addActiveProfiles( settings.getActiveProfiles() ); > > for ( org.apache.maven.settings.Profile rawProfile : > settings.getProfiles() ) > { > request.addProfile( SettingsUtils.convertFromSettingsProfile( > rawProfile ) ); > - > - if ( settings.getActiveProfiles().contains( > rawProfile.getId() ) ) > - { > - List<Repository> remoteRepositories = > rawProfile.getRepositories(); > - for ( Repository remoteRepository : remoteRepositories ) > - { > - try > - { > - request.addRemoteRepository( > - > MavenRepositorySystem.buildArtifactRepository( remoteRepository ) ); > - } > - catch ( InvalidRepositoryException e ) > - { > - // do nothing for now > - } > - } > - > - List<Repository> pluginRepositories = > rawProfile.getPluginRepositories(); > - for ( Repository pluginRepository : pluginRepositories ) > - { > - try > - { > - request.addPluginArtifactRepository( > - > MavenRepositorySystem.buildArtifactRepository( pluginRepository ) ); > - } > - catch ( InvalidRepositoryException e ) > - { > - // do nothing for now > - } > - } > - } > } > + > return request; > } > > @@ -287,4 +357,5 @@ public class SettingsXmlConfigurationProcessor > return new File( workingDirectory, file.getPath() > ).getAbsoluteFile(); > } > } > + > } > > -- ----- Arnaud Héritier http://aheritier.net Mail/GTalk: aheritier AT gmail DOT com Twitter/Skype : aheritier
