You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2018/05/20 22:08:39 UTC
[maven] 01/01: [MNG-6401] Cannot interpolate property in proxy port
of settings.xml
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch MNG-6401
in repository https://gitbox.apache.org/repos/asf/maven.git
commit 36e0e64a81ee2620906eebae5a5bd454175ea59d
Author: jkatada <jk...@gmail.com>
AuthorDate: Tue May 1 18:28:28 2018 +0900
[MNG-6401] Cannot interpolate property in proxy port of settings.xml
This closes #163
---
.../settings/building/DefaultSettingsBuilder.java | 57 +++++++++-------------
1 file changed, 22 insertions(+), 35 deletions(-)
diff --git a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
index 3cdae7d..cb77e95 100644
--- a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
+++ b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java
@@ -21,14 +21,13 @@ package org.apache.maven.settings.building;
import java.io.File;
import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.maven.building.FileSource;
import org.apache.maven.building.Source;
+import org.apache.maven.building.StringSource;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.TrackableBase;
import org.apache.maven.settings.io.SettingsParseException;
@@ -43,6 +42,8 @@ import org.codehaus.plexus.interpolation.InterpolationException;
import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
/**
* Builds the effective settings from a user settings file and/or a global settings file.
@@ -101,8 +102,6 @@ public class DefaultSettingsBuilder
problems.setSource( "" );
- userSettings = interpolate( userSettings, request, problems );
-
// 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 )
@@ -161,6 +160,19 @@ public class DefaultSettingsBuilder
problems.setSource( settingsSource.getLocation() );
+ Source interpolatedSettingsSource;
+ try ( XmlStreamReader xmlStreamReader = new XmlStreamReader( settingsSource.getInputStream() ) )
+ {
+ String serializedSettings = IOUtil.toString( xmlStreamReader );
+ interpolatedSettingsSource = new StringSource( interpolate( serializedSettings, request, problems ) );
+ }
+ catch ( IOException e )
+ {
+ problems.add( SettingsProblem.Severity.FATAL, "Non-readable settings " + settingsSource.getLocation()
+ + ": " + e.getMessage(), -1, -1, e );
+ return new Settings();
+ }
+
Settings settings;
try
@@ -169,13 +181,13 @@ public class DefaultSettingsBuilder
try
{
- settings = settingsReader.read( settingsSource.getInputStream(), options );
+ settings = settingsReader.read( interpolatedSettingsSource.getInputStream(), options );
}
catch ( SettingsParseException e )
{
options = Collections.singletonMap( SettingsReader.IS_STRICT, Boolean.FALSE );
- settings = settingsReader.read( settingsSource.getInputStream(), options );
+ settings = settingsReader.read( interpolatedSettingsSource.getInputStream(), options );
problems.add( SettingsProblem.Severity.WARNING, e.getMessage(), e.getLineNumber(), e.getColumnNumber(),
e );
@@ -199,22 +211,9 @@ public class DefaultSettingsBuilder
return settings;
}
- private Settings interpolate( Settings settings, SettingsBuildingRequest request,
+ private String interpolate( String serializedSettings, SettingsBuildingRequest request,
SettingsProblemCollector problems )
{
- StringWriter writer = new StringWriter( 1024 * 4 );
-
- try
- {
- settingsWriter.write( writer, null, settings );
- }
- catch ( IOException e )
- {
- throw new IllegalStateException( "Failed to serialize settings to memory", e );
- }
-
- String serializedSettings = writer.toString();
-
RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
interpolator.addValueSource( new PropertiesBasedValueSource( request.getUserProperties() ) );
@@ -246,29 +245,17 @@ public class DefaultSettingsBuilder
}
} );
+ String result;
try
{
- serializedSettings = interpolator.interpolate( serializedSettings, "settings" );
+ result = interpolator.interpolate( serializedSettings, "settings" );
}
catch ( InterpolationException e )
{
problems.add( SettingsProblem.Severity.ERROR, "Failed to interpolate settings: " + e.getMessage(), -1, -1,
e );
- return settings;
- }
-
- Settings result;
- try
- {
- Map<String, ?> options = Collections.singletonMap( SettingsReader.IS_STRICT, Boolean.FALSE );
- result = settingsReader.read( new StringReader( serializedSettings ), options );
- }
- catch ( IOException e )
- {
- problems.add( SettingsProblem.Severity.ERROR, "Failed to interpolate settings: " + e.getMessage(), -1, -1,
- e );
- return settings;
+ return serializedSettings;
}
return result;
--
To stop receiving notification emails like this one, please contact
michaelo@apache.org.