[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/10782f6c
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/10782f6c
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/10782f6c

Branch: refs/heads/MNG-5984
Commit: 10782f6c762c7a2a21328c6326b5e569a768d982
Parents: 34afec6
Author: Christian Schulte <schu...@apache.org>
Authored: Thu Feb 25 19:46:13 2016 +0100
Committer: Christian Schulte <schu...@apache.org>
Committed: Wed Mar 8 19:42:44 2017 +0100

----------------------------------------------------------------------
 .../apache/maven/settings/SettingsUtils.java    |   2 +-
 .../java/org/apache/maven/cli/MavenCli.java     | 158 ++++++++++++++++---
 .../SettingsXmlConfigurationProcessor.java      |  65 ++------
 3 files changed, 152 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/10782f6c/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java 
b/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
index 8da696e..16ccdb6 100644
--- a/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
+++ b/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java
@@ -139,7 +139,7 @@ public final class SettingsUtils
 
         profile.setId( settingsProfile.getId() );
 
-        profile.setSource( "settings.xml" );
+        profile.setSource( org.apache.maven.model.Profile.SOURCE_SETTINGS );
 
         Activation settingsActivation = settingsProfile.getActivation();
 

http://git-wip-us.apache.org/repos/asf/maven/blob/10782f6c/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 8d38ab0..27f86d8 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,6 +19,28 @@ package org.apache.maven.cli;
  * under the License.
  */
 
+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.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 java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import com.google.common.base.Charsets;
 import com.google.common.io.Files;
 import com.google.inject.AbstractModule;
@@ -28,6 +50,8 @@ 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 +82,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;
@@ -89,28 +121,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.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 java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 
 // TODO push all common bits back to plexus cli and prepare for transition to 
Guice. We don't need 50 ways to make CLIs
@@ -177,6 +187,8 @@ public class MavenCli
 
     private Map<String, ConfigurationProcessor> configurationProcessors;
 
+    private ProfileSelector profileSelector;
+
     public MavenCli()
     {
         this( null );
@@ -299,6 +311,7 @@ public class MavenCli
             populateRequest( cliRequest );
             encryption( cliRequest );
             repository( cliRequest );
+            profiles( cliRequest );
             return execute( cliRequest );
         }
         catch ( ExitException e )
@@ -642,6 +655,8 @@ public class MavenCli
 
         dispatcher = (DefaultSecDispatcher) container.lookup( 
SecDispatcher.class, "maven" );
 
+        profileSelector = container.lookup( ProfileSelector.class );
+
         return container;
     }
 
@@ -705,6 +720,10 @@ public class MavenCli
 
                 request = executionRequestPopulator.populateDefaults( request 
);
 
+                profileSelector = container.lookup( ProfileSelector.class );
+
+                profiles( request );
+
                 BootstrapCoreExtensionManager resolver = container.lookup( 
BootstrapCoreExtensionManager.class );
 
                 return resolver.loadCoreExtensions( request, 
providedArtifacts, extensions );
@@ -894,13 +913,104 @@ 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 );
         }
     }
 
+    private void profiles( final CliRequest request )
+    {
+        this.profiles( request.getRequest() );
+    }
+
+    private void profiles( final MavenExecutionRequest request )
+    {
+        // Adds repositories from profiles.
+        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 )
         throws MavenExecutionRequestPopulationException
     {

http://git-wip-us.apache.org/repos/asf/maven/blob/10782f6c/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 d9a6954..1008d4e 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,11 +21,8 @@ package org.apache.maven.cli.configuration;
 
 import java.io.File;
 import java.io.FileNotFoundException;
-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;
@@ -33,7 +30,6 @@ import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionRequestPopulationException;
 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;
@@ -42,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;
@@ -51,6 +46,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" );
@@ -68,9 +64,6 @@ public class SettingsXmlConfigurationProcessor
     @Requirement
     private SettingsBuilder settingsBuilder;
 
-    @Requirement
-    private SettingsDecrypter settingsDecrypter;
-
     @Override
     public void process( CliRequest cliRequest )
         throws Exception
@@ -88,8 +81,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 +100,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 +124,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 );
 
@@ -218,43 +216,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 +255,5 @@ public class SettingsXmlConfigurationProcessor
             return new File( workingDirectory, file.getPath() 
).getAbsoluteFile();
         }
     }
+
 }

Reply via email to