aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java290
1 files changed, 290 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
new file mode 100644
index 00000000..791a2267
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
@@ -0,0 +1,290 @@
+package org.apache.maven.cli.configuration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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;
+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;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+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;
+
+@Component( role = ConfigurationProcessor.class, hint = SettingsXmlConfigurationProcessor.HINT )
+public class SettingsXmlConfigurationProcessor
+ implements ConfigurationProcessor
+{
+ public static final String HINT = "settings";
+
+ public static final String USER_HOME = System.getProperty( "user.home" );
+
+ public static final File USER_MAVEN_CONFIGURATION_HOME = new File( USER_HOME, ".m2" );
+
+ 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" );
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private SettingsBuilder settingsBuilder;
+
+ @Requirement
+ private SettingsDecrypter settingsDecrypter;
+
+ @Override
+ public void process( CliRequest cliRequest )
+ throws Exception
+ {
+ CommandLine commandLine = cliRequest.getCommandLine();
+ String workingDirectory = cliRequest.getWorkingDirectory();
+ MavenExecutionRequest request = cliRequest.getRequest();
+
+ File userSettingsFile;
+
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
+ {
+ userSettingsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_USER_SETTINGS ) );
+ userSettingsFile = resolveFile( userSettingsFile, workingDirectory );
+
+ if ( !userSettingsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified user settings file does not exist: "
+ + userSettingsFile );
+ }
+ }
+ else
+ {
+ userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
+ }
+
+ File globalSettingsFile;
+
+ if ( commandLine.hasOption( CLIManager.ALTERNATE_GLOBAL_SETTINGS ) )
+ {
+ globalSettingsFile = new File( commandLine.getOptionValue( CLIManager.ALTERNATE_GLOBAL_SETTINGS ) );
+ globalSettingsFile = resolveFile( globalSettingsFile, workingDirectory );
+
+ if ( !globalSettingsFile.isFile() )
+ {
+ throw new FileNotFoundException( "The specified global settings file does not exist: "
+ + globalSettingsFile );
+ }
+ }
+ else
+ {
+ globalSettingsFile = DEFAULT_GLOBAL_SETTINGS_FILE;
+ }
+
+ request.setGlobalSettingsFile( globalSettingsFile );
+ request.setUserSettingsFile( userSettingsFile );
+
+ SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
+ settingsRequest.setGlobalSettingsFile( globalSettingsFile );
+ settingsRequest.setUserSettingsFile( userSettingsFile );
+ settingsRequest.setSystemProperties( cliRequest.getSystemProperties() );
+ settingsRequest.setUserProperties( cliRequest.getUserProperties() );
+
+ if ( request.getEventSpyDispatcher() != null )
+ {
+ 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() ) );
+
+ SettingsBuildingResult settingsResult = settingsBuilder.build( settingsRequest );
+
+ if ( request.getEventSpyDispatcher() != null )
+ {
+ request.getEventSpyDispatcher().onEvent( settingsResult );
+ }
+
+ populateFromSettings( request, settingsResult.getEffectiveSettings() );
+
+ if ( !settingsResult.getProblems().isEmpty() && logger.isWarnEnabled() )
+ {
+ logger.warn( "" );
+ logger.warn( "Some problems were encountered while building the effective settings" );
+
+ for ( SettingsProblem problem : settingsResult.getProblems() )
+ {
+ logger.warn( problem.getMessage() + " @ " + problem.getLocation() );
+ }
+ logger.warn( "" );
+ }
+ }
+
+ private MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
+ throws MavenExecutionRequestPopulationException
+ {
+ if ( settings == null )
+ {
+ return request;
+ }
+
+ request.setOffline( settings.isOffline() );
+
+ request.setInteractiveMode( settings.isInteractiveMode() );
+
+ request.setPluginGroups( settings.getPluginGroups() );
+
+ request.setLocalRepositoryPath( settings.getLocalRepository() );
+
+ for ( Server server : settings.getServers() )
+ {
+ server = server.clone();
+
+ request.addServer( server );
+ }
+
+ // <proxies>
+ // <proxy>
+ // <active>true</active>
+ // <protocol>http</protocol>
+ // <host>proxy.somewhere.com</host>
+ // <port>8080</port>
+ // <username>proxyuser</username>
+ // <password>somepassword</password>
+ // <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
+ // </proxy>
+ // </proxies>
+
+ for ( Proxy proxy : settings.getProxies() )
+ {
+ if ( !proxy.isActive() )
+ {
+ continue;
+ }
+
+ proxy = proxy.clone();
+
+ request.addProxy( proxy );
+ }
+
+ // <mirrors>
+ // <mirror>
+ // <id>nexus</id>
+ // <mirrorOf>*</mirrorOf>
+ // <url>http://repository.sonatype.org/content/groups/public</url>
+ // </mirror>
+ // </mirrors>
+
+ for ( Mirror mirror : settings.getMirrors() )
+ {
+ mirror = mirror.clone();
+
+ request.addMirror( mirror );
+ }
+
+ request.setActiveProfiles( 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;
+ }
+
+ private Object getLocation( Source source, File defaultLocation )
+ {
+ if ( source != null )
+ {
+ return source.getLocation();
+ }
+ return defaultLocation;
+ }
+
+ static File resolveFile( File file, String workingDirectory )
+ {
+ if ( file == null )
+ {
+ return null;
+ }
+ else if ( file.isAbsolute() )
+ {
+ return file;
+ }
+ else if ( file.getPath().startsWith( File.separator ) )
+ {
+ // drive-relative Windows path
+ return file.getAbsoluteFile();
+ }
+ else
+ {
+ return new File( workingDirectory, file.getPath() ).getAbsoluteFile();
+ }
+ }
+}