[MNG-5984] Maven core extension resolution ignores repositories from activeByDefault profiles in settings.xml
o Updated to decouple settings profile activation from the 'ConfigurationProcessor' in use. Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/62374f51 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/62374f51 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/62374f51 Branch: refs/heads/slf4j-gossip Commit: 62374f51fd05b233fc34e39c294322fa3823e4d7 Parents: c940b84 Author: Christian Schulte <schu...@apache.org> Authored: Fri Feb 26 21:05:01 2016 +0100 Committer: Christian Schulte <schu...@apache.org> Committed: Fri Feb 26 21:05:01 2016 +0100 ---------------------------------------------------------------------- .../java/org/apache/maven/cli/MavenCli.java | 151 +++++++++++++++---- .../SettingsXmlConfigurationProcessor.java | 102 ------------- 2 files changed, 124 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/62374f51/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java ---------------------------------------------------------------------- diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index 93b25d6..93af417 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -19,15 +19,34 @@ package org.apache.maven.cli; * under the License. */ -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import com.google.inject.AbstractModule; +import java.io.BufferedInputStream; +import java.io.Console; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.StringTokenizer; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.UnrecognizedOptionException; import org.apache.maven.BuildAbort; import org.apache.maven.InternalErrorException; import org.apache.maven.Maven; +import org.apache.maven.artifact.InvalidRepositoryException; +import org.apache.maven.bridge.MavenRepositorySystem; import org.apache.maven.building.FileSource; import org.apache.maven.building.Problem; import org.apache.maven.building.Source; @@ -58,7 +77,15 @@ import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.extension.internal.CoreExports; import org.apache.maven.extension.internal.CoreExtensionEntry; import org.apache.maven.lifecycle.LifecycleExecutionException; +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.building.ModelProcessor; +import org.apache.maven.model.profile.DefaultProfileActivationContext; +import org.apache.maven.model.profile.ProfileSelector; import org.apache.maven.project.MavenProject; import org.apache.maven.properties.internal.EnvironmentUtils; import org.apache.maven.properties.internal.SystemProperties; @@ -77,6 +104,9 @@ import org.codehaus.plexus.component.repository.exception.ComponentLookupExcepti import org.codehaus.plexus.logging.LoggerManager; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import com.google.inject.AbstractModule; import org.eclipse.aether.transfer.TransferListener; import org.slf4j.ILoggerFactory; import org.slf4j.Logger; @@ -87,27 +117,6 @@ import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; import org.sonatype.plexus.components.sec.dispatcher.SecUtil; import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity; -import java.io.BufferedInputStream; -import java.io.Console; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.Set; -import java.util.StringTokenizer; - // TODO: push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs /** @@ -172,6 +181,8 @@ public class MavenCli private Map<String, ConfigurationProcessor> configurationProcessors; + private ProfileSelector profileSelector; + public MavenCli() { this( null ); @@ -280,9 +291,9 @@ public class MavenCli properties( cliRequest ); localContainer = container( cliRequest ); commands( cliRequest ); - populateRequest( cliRequest ); configure( cliRequest ); toolchains( cliRequest ); + populateRequest( cliRequest ); encryption( cliRequest ); repository( cliRequest ); return execute( cliRequest ); @@ -594,6 +605,8 @@ public class MavenCli dispatcher = (DefaultSecDispatcher) container.lookup( SecDispatcher.class, "maven" ); + profileSelector = container.lookup( ProfileSelector.class ); + return container; } @@ -848,11 +861,95 @@ public class MavenCli private void repository( CliRequest cliRequest ) throws Exception { - if ( cliRequest.commandLine.hasOption( CLIManager.LEGACY_LOCAL_REPOSITORY ) || Boolean.getBoolean( - "maven.legacyLocalRepo" ) ) + if ( cliRequest.commandLine.hasOption( CLIManager.LEGACY_LOCAL_REPOSITORY ) + || Boolean.getBoolean( "maven.legacyLocalRepo" ) ) { cliRequest.request.setUseLegacyLocalRepository( true ); } + + // Adds repositories from settings profiles. + final MavenExecutionRequest request = cliRequest.getRequest(); + 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(), Profile.SOURCE_SETTINGS, -1, -1, + null, req.getException() ) ); + + } + + } ); + + if ( !modelProblems.isEmpty() ) + { + slf4jLogger.warn( "" ); + slf4jLogger.warn( "Some problems were encountered while processing profiles" ); + + for ( final ModelProblem problem : modelProblems ) + { + slf4jLogger.warn( problem.getMessage(), problem.getException() ); + } + + slf4jLogger.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 ) + { + slf4jLogger.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 ) + { + slf4jLogger.warn( String.format( "Failure adding plugin repository '%s' from profile '%s'.", + pluginRepository.getId(), profile.getId() ), e ); + + } + } + } + } } private int execute( CliRequest cliRequest ) http://git-wip-us.apache.org/repos/asf/maven/blob/62374f51/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 1a57baa..7ba2194 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,25 +21,13 @@ 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; -import org.apache.maven.artifact.InvalidRepositoryException; -import org.apache.maven.bridge.MavenRepositorySystem; import org.apache.maven.building.Source; 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.Server; @@ -50,7 +38,6 @@ import org.apache.maven.settings.building.SettingsBuilder; import org.apache.maven.settings.building.SettingsBuildingRequest; import org.apache.maven.settings.building.SettingsBuildingResult; import org.apache.maven.settings.building.SettingsProblem; -import org.apache.maven.settings.crypto.SettingsDecrypter; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.slf4j.Logger; @@ -77,12 +64,6 @@ public class SettingsXmlConfigurationProcessor @Requirement private SettingsBuilder settingsBuilder; - @Requirement - private SettingsDecrypter settingsDecrypter; - - @Requirement - private ProfileSelector profileSelector; - @Override public void process( CliRequest cliRequest ) throws Exception @@ -171,89 +152,6 @@ 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 )