You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/03/19 16:02:22 UTC
svn commit: r925254 - in
/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings:
DefaultMavenSettingsBuilder.java MavenSettingsBuilder.java
building/DefaultSettingsBuilder.java
Author: bentmann
Date: Fri Mar 19 15:02:22 2010
New Revision: 925254
URL: http://svn.apache.org/viewvc?rev=925254&view=rev
Log:
o Restored backward-compat
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java?rev=925254&r1=925253&r2=925254&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java Fri Mar 19 15:02:22 2010
@@ -21,25 +21,18 @@ package org.apache.maven.settings;
import java.io.File;
import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.List;
import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
-import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuilder;
+import org.apache.maven.settings.building.SettingsBuildingException;
+import org.apache.maven.settings.building.SettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsProblem;
import org.apache.maven.settings.validation.SettingsValidationResult;
-import org.apache.maven.settings.validation.SettingsValidator;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.interpolation.EnvarBasedValueSource;
-import org.codehaus.plexus.interpolation.InterpolationException;
-import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
-import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
/**
@@ -50,200 +43,138 @@ public class DefaultMavenSettingsBuilder
extends AbstractLogEnabled
implements MavenSettingsBuilder
{
+
@Requirement
- private SettingsValidator validator;
+ private SettingsBuilder settingsBuilder;
- /** @since 2.1 */
- public Settings buildSettings( MavenExecutionRequest request )
+ public Settings buildSettings()
throws IOException, XmlPullParserException
{
- File userSettingsFile = request.getUserSettingsFile();
-
- File globalSettingsFile = request.getGlobalSettingsFile();
-
- if ( ( globalSettingsFile == null ) && ( userSettingsFile == null ) )
- {
- getLogger().debug(
- "No settings files provided, and default locations are disabled for this request. Returning empty Settings instance." );
- return new Settings();
- }
-
- getLogger().debug( "Reading global settings from: " + globalSettingsFile );
-
- Settings globalSettings = readSettings( globalSettingsFile );
-
- if ( globalSettings == null )
- {
- globalSettings = new Settings();
- }
-
- getLogger().debug( "Reading user settings from: " + userSettingsFile );
-
- Settings userSettings = readSettings( userSettingsFile );
-
- if ( userSettings == null )
- {
- userSettings = new Settings();
- }
-
- validateSettings(
- globalSettings,
- globalSettingsFile );
-
- validateSettings(
- userSettings,
- userSettingsFile );
-
- SettingsUtils.merge(
- userSettings,
- globalSettings,
- TrackableBase.GLOBAL_LEVEL );
-
- userSettings = interpolate( userSettings, request );
-
- // for the special case of a drive-relative Windows path, make sure it's absolute to save plugins from trouble
- String localRepository = userSettings.getLocalRepository();
- if ( localRepository != null && localRepository.length() > 0 )
- {
- File file = new File( localRepository );
- if ( !file.isAbsolute() && file.getPath().startsWith( File.separator ) )
- {
- userSettings.setLocalRepository( file.getAbsolutePath() );
- }
- }
+ File userSettingsFile =
+ getFile( "${user.home}/.m2/settings.xml", "user.home", MavenSettingsBuilder.ALT_USER_SETTINGS_XML_LOCATION );
- return userSettings;
+ return buildSettings( userSettingsFile );
}
-
- private Settings interpolate( Settings settings, MavenExecutionRequest request )
+ public Settings buildSettings( boolean useCachedSettings )
throws IOException, XmlPullParserException
{
- List<String> activeProfiles = settings.getActiveProfiles();
-
- StringWriter writer = new StringWriter();
-
- new SettingsXpp3Writer().write(
- writer,
- settings );
-
- String serializedSettings = writer.toString();
-
- RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
-
- interpolator.addValueSource( new PropertiesBasedValueSource( request.getUserProperties() ) );
+ return buildSettings();
+ }
- interpolator.addValueSource( new PropertiesBasedValueSource( request.getSystemProperties() ) );
+ public Settings buildSettings( File userSettingsFile )
+ throws IOException, XmlPullParserException
+ {
+ File globalSettingsFile =
+ getFile( "${maven.home}/conf/settings.xml", "maven.home",
+ MavenSettingsBuilder.ALT_GLOBAL_SETTINGS_XML_LOCATION );
+
+ SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
+ request.setUserSettingsFile( userSettingsFile );
+ request.setGlobalSettingsFile( globalSettingsFile );
+ request.setSystemProperties( System.getProperties() );
+ return build(request);
+ }
- interpolator.addValueSource( new EnvarBasedValueSource() );
+ public Settings buildSettings( File userSettingsFile, boolean useCachedSettings )
+ throws IOException, XmlPullParserException
+ {
+ return buildSettings( userSettingsFile );
+ }
+ private Settings build( SettingsBuildingRequest request )
+ throws IOException, XmlPullParserException
+ {
try
{
- serializedSettings = interpolator.interpolate(
- serializedSettings,
- "settings" );
+ return settingsBuilder.build( request ).getEffectiveSettings();
}
- catch ( InterpolationException e )
+ catch ( SettingsBuildingException e )
{
- IOException error = new IOException( "Failed to interpolate settings." );
- error.initCause( e );
-
- throw error;
+ throw (IOException) new IOException( e.getMessage() ).initCause( e );
}
-
- Settings result = new SettingsXpp3Reader().read( new StringReader( serializedSettings ) );
-
- result.setActiveProfiles( activeProfiles );
-
- return result;
}
- private Settings readSettings( File settingsFile )
+ /** @since 2.1 */
+ public Settings buildSettings( MavenExecutionRequest request )
throws IOException, XmlPullParserException
{
- if ( settingsFile == null )
- {
- getLogger().debug( "Settings file is null. Returning null." );
-
- return null;
- }
-
- if ( !settingsFile.exists() )
- {
- getLogger().debug( "Settings file doesn't exist. Returning null." );
-
- return null;
- }
+ SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
+ settingsRequest.setUserSettingsFile( request.getUserSettingsFile() );
+ settingsRequest.setGlobalSettingsFile( request.getGlobalSettingsFile() );
+ settingsRequest.setUserProperties( request.getUserProperties() );
+ settingsRequest.setSystemProperties( request.getSystemProperties() );
+
+ return build(settingsRequest);
+ }
- Settings settings = null;
+ public SettingsValidationResult validateSettings( File settingsFile )
+ {
+ SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
+ request.setUserSettingsFile( settingsFile );
- Reader reader = null;
+ SettingsValidationResult result = new SettingsValidationResult();
try
{
- reader = ReaderFactory.newXmlReader( settingsFile );
-
- SettingsXpp3Reader modelReader = new SettingsXpp3Reader();
-
- settings = modelReader.read( reader );
- }
- catch ( XmlPullParserException e )
- {
- getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing XmlPullParserException..." );
-
- throw e;
- }
- catch ( IOException e )
- {
- getLogger().error( "Failed to read settings from: " + settingsFile + ". Throwing IOException..." );
-
- throw e;
+ settingsBuilder.build( request );
}
- finally
+ catch ( SettingsBuildingException e )
{
- IOUtil.close( reader );
+ for ( SettingsProblem problem : e.getProblems() )
+ {
+ result.addMessage( problem.getMessage() );
+ }
}
- return settings;
+ return result;
}
- private void validateSettings( Settings settings,
- File location )
- throws IOException
+ private File getFile( String pathPattern, String basedirSysProp, String altLocationSysProp )
{
- SettingsValidationResult validationResult = validator.validate( settings );
+ // -------------------------------------------------------------------------------------
+ // Alright, here's the justification for all the regexp wizardry below...
+ //
+ // Continuum and other server-like apps may need to locate the user-level and
+ // global-level settings somewhere other than ${user.home} and ${maven.home},
+ // respectively. Using a simple replacement of these patterns will allow them
+ // to specify the absolute path to these files in a customized components.xml
+ // file. Ideally, we'd do full pattern-evaluation against the sysprops, but this
+ // is a first step. There are several replacements below, in order to normalize
+ // the path character before we operate on the string as a regex input, and
+ // in order to avoid surprises with the File construction...
+ // -------------------------------------------------------------------------------------
+
+ String path = System.getProperty( altLocationSysProp );
+
+ if ( StringUtils.isEmpty( path ) )
+ {
+ // TODO: This replacing shouldn't be necessary as user.home should be in the
+ // context of the container and thus the value would be interpolated by Plexus
+ String basedir = System.getProperty( basedirSysProp );
+ if ( basedir == null )
+ {
+ basedir = System.getProperty( "user.dir" );
+ }
- if ( validationResult.getMessageCount() > 0 )
- {
- throw new IOException( "Failed to validate Settings file at " + location + "\n" + validationResult.render( "\n" ) );
- }
- }
+ basedir = basedir.replaceAll( "\\\\", "/" );
+ basedir = basedir.replaceAll( "\\$", "\\\\\\$" );
- public SettingsValidationResult validateSettings( File settingsFile )
- {
- SettingsValidationResult result = new SettingsValidationResult();
- if ( settingsFile != null && !settingsFile.canRead() )
- {
- try
- {
- Settings settings = readSettings( settingsFile );
+ path = pathPattern.replaceAll( "\\$\\{" + basedirSysProp + "\\}", basedir );
+ path = path.replaceAll( "\\\\", "/" );
+ // ---------------------------------------------------------------------------------
+ // I'm not sure if this last regexp was really intended to disallow the usage of
+ // network paths as user.home directory. Unfortunately it did. I removed it and
+ // have not detected any problems yet.
+ // ---------------------------------------------------------------------------------
+ // path = path.replaceAll( "//", "/" );
- return validator.validate( settings );
- }
- catch ( IOException e )
- {
- result.addMessage( e.getMessage() );
- }
- catch ( XmlPullParserException e )
- {
- result.addMessage( e.getMessage() );
- }
+ return new File( path ).getAbsoluteFile();
}
else
{
- // TODO do we have anything to say?
+ return new File( path ).getAbsoluteFile();
}
-
- return result;
}
+
}
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java?rev=925254&r1=925253&r2=925254&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java Fri Mar 19 15:02:22 2010
@@ -33,10 +33,52 @@ import org.codehaus.plexus.util.xml.pull
@Deprecated
public interface MavenSettingsBuilder
{
+
String ROLE = MavenSettingsBuilder.class.getName();
+ String ALT_USER_SETTINGS_XML_LOCATION = "org.apache.maven.user-settings";
+ String ALT_GLOBAL_SETTINGS_XML_LOCATION = "org.apache.maven.global-settings";
+ String ALT_LOCAL_REPOSITORY_LOCATION = "maven.repo.local";
+
Settings buildSettings( MavenExecutionRequest request )
throws IOException, XmlPullParserException;
SettingsValidationResult validateSettings( File settingsFile );
+
+ /**
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings()
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param useCachedSettings if true, doesn't reload the user settings
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( boolean useCachedSettings )
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param userSettingsFile a given user settings file
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( File userSettingsFile )
+ throws IOException, XmlPullParserException;
+
+ /**
+ * @param userSettingsFile a given user settings file
+ * @param useCachedSettings if true, doesn't reload the user settings
+ * @return a <code>Settings</code> object from the user settings file.
+ * @throws IOException if any
+ * @throws XmlPullParserException if any
+ */
+ Settings buildSettings( File userSettingsFile, boolean useCachedSettings )
+ throws IOException, XmlPullParserException;
+
}
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java?rev=925254&r1=925253&r2=925254&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java Fri Mar 19 15:02:22 2010
@@ -166,8 +166,6 @@ public class DefaultSettingsBuilder
private Settings interpolate( Settings settings, SettingsBuildingRequest request, List<SettingsProblem> problems )
{
- List<String> activeProfiles = settings.getActiveProfiles();
-
StringWriter writer = new StringWriter( 1024 * 4 );
try
@@ -222,8 +220,6 @@ public class DefaultSettingsBuilder
return settings;
}
- result.setActiveProfiles( activeProfiles );
-
return result;
}