Extended processing of Maven settings.xml to consider server-specific configuration
diff --git a/src/main/java/org/eclipse/aether/ant/AntRepoSys.java b/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
index 47578fd..2808558 100644
--- a/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
+++ b/src/main/java/org/eclipse/aether/ant/AntRepoSys.java
@@ -12,6 +12,8 @@
import java.io.File;
import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -43,6 +45,7 @@
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.apache.tools.ant.types.Reference;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.eclipse.aether.ConfigurationProperties;
import org.eclipse.aether.DefaultRepositoryCache;
import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -219,6 +222,7 @@
configProps.putAll( System.getProperties() );
configProps.putAll( (Map<?, ?>) project.getProperties() );
configProps.putAll( (Map<?, ?>) project.getUserProperties() );
+ processServerConfiguration( configProps );
session.setConfigProperties( configProps );
session.setOffline( isOffline() );
@@ -265,6 +269,52 @@
return getSettings().isOffline();
}
+ private void processServerConfiguration( Map<Object, Object> configProps )
+ {
+ Settings settings = getSettings();
+ for ( Server server : settings.getServers() )
+ {
+ if ( server.getConfiguration() != null )
+ {
+ Xpp3Dom dom = (Xpp3Dom) server.getConfiguration();
+ for ( int i = dom.getChildCount() - 1; i >= 0; i-- )
+ {
+ Xpp3Dom child = dom.getChild( i );
+ if ( "wagonProvider".equals( child.getName() ) )
+ {
+ dom.removeChild( i );
+ }
+ else if ( "httpHeaders".equals( child.getName() ) )
+ {
+ configProps.put( ConfigurationProperties.HTTP_HEADERS + "." + server.getId(),
+ getHttpHeaders( child ) );
+ }
+ }
+
+ configProps.put( "aether.connector.wagon.config." + server.getId(), dom );
+ }
+
+ configProps.put( "aether.connector.perms.fileMode." + server.getId(), server.getFilePermissions() );
+ configProps.put( "aether.connector.perms.dirMode." + server.getId(), server.getDirectoryPermissions() );
+ }
+ }
+
+ private Map<String, String> getHttpHeaders( Xpp3Dom dom )
+ {
+ Map<String, String> headers = new HashMap<String, String>();
+ for ( int i = 0; i < dom.getChildCount(); i++ )
+ {
+ Xpp3Dom child = dom.getChild( i );
+ Xpp3Dom name = child.getChild( "name" );
+ Xpp3Dom value = child.getChild( "value" );
+ if ( name != null && name.getValue() != null )
+ {
+ headers.put( name.getValue(), ( value != null ) ? value.getValue() : null );
+ }
+ }
+ return Collections.unmodifiableMap( headers );
+ }
+
private File getDefaultLocalRepoDir()
{
if ( mavenRepoDirFromProperty != null )