Index: src/java/org/apache/ivy/util/ConfigurationUtils.java =================================================================== --- src/java/org/apache/ivy/util/ConfigurationUtils.java (revision 691563) +++ src/java/org/apache/ivy/util/ConfigurationUtils.java Wed Sep 03 19:08:42 PDT 2008 @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; +import java.util.Iterator; import org.apache.ivy.core.module.descriptor.Configuration; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; @@ -61,6 +62,7 @@ } Set result = new LinkedHashSet(); + Set excluded = new LinkedHashSet(); for (int i = 0; i < confs.length; i++) { if ("*".equals(confs[i])) { result.addAll(Arrays.asList(md.getConfigurationsNames())); @@ -78,10 +80,15 @@ result.add(all[j].getName()); } } + } else if (confs[i].startsWith("!")) { + excluded.add(confs[i].substring( 1 )); } else { result.add(confs[i]); } } + for (Iterator iter = excluded.iterator(); iter.hasNext();) { + result.remove(iter.next()); + } return (String[]) result.toArray(new String[result.size()]); } Index: test/java/org/apache/ivy/ant/IvyResolveTest.java =================================================================== --- test/java/org/apache/ivy/ant/IvyResolveTest.java (revision 691563) +++ test/java/org/apache/ivy/ant/IvyResolveTest.java Wed Sep 03 19:08:24 PDT 2008 @@ -388,6 +388,17 @@ assertNotNull(project.getReference("ivy.resolved.configurations.ref.testWithResolveId")); } + public void testExcludedConf() throws Exception { + resolve.setFile(new File("test/java/org/apache/ivy/ant/ivy-multiconf.xml")); + resolve.setConf("*,!default"); + resolve.execute(); + + assertTrue(getIvyFileInCache( + ModuleRevisionId.newInstance("org1", "mod1.1", "2.0")).exists()); + assertFalse(getIvyFileInCache( + ModuleRevisionId.newInstance("org1", "mod1.2", "2.0")).exists()); + } + public void testResolveWithAbsoluteFile() { // IVY-396 File ivyFile = new File("test/java/org/apache/ivy/ant/ivy-simple.xml");