Here's a real world example:<conf name="win32" e:axis="platform" /> <conf name="win64" e:axis="platform" /> <conf name="linux32" e:axis="platform" /> <conf name="linux64" e:axis="platform" />
<conf name="debug" e:axis="debug" /> <conf name="release" e:axis="debug" /> It's nice to be able to refer to the platform configurations, especially if the configurations are defined in a separate file, or maybe even several ones, so you don't know in advance all the platform configurations. Does it make sense for you? Xavier On Mon, Jun 29, 2009 at 8:24 PM, Gilles Scokart <gscok...@gmail.com> wrote: > Do you have a concrete use case for this feature? Based on the the > example, > I didn't catch it directly. Maybe a real example combining 2 real axes > (other than 'color') would help. > > > Gilles Scokart > > > 2009/6/28 <xav...@apache.org> > > > Author: xavier > > Date: Sun Jun 28 13:02:10 2009 > > New Revision: 789095 > > > > URL: http://svn.apache.org/viewvc?rev=789095&view=rev > > Log: > > NEW: configuration groups (IVY-1097) > > > > Added: > > > > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java > > (with props) > > ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.dll (with > > props) > > ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.jar (with > > props) > > ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.so (with > > props) > > ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml (with > props) > > ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml (with > props) > > Modified: > > ant/ivy/core/trunk/CHANGES.txt > > ant/ivy/core/trunk/doc/ivyfile/dependency.html > > > > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java > > > > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java > > > > > ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java > > > > Modified: ant/ivy/core/trunk/CHANGES.txt > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=789095&r1=789094&r2=789095&view=diff > > > > > ============================================================================== > > --- ant/ivy/core/trunk/CHANGES.txt (original) > > +++ ant/ivy/core/trunk/CHANGES.txt Sun Jun 28 13:02:10 2009 > > @@ -90,6 +90,7 @@ > > trunk > > ===================================== > > - NEW: configuration intersections (IVY-1093) > > +- NEW: configuration groups (IVY-1097) > > > > - IMPROVEMENT: Added support for NTLM authentication (IVY-1094) (thanks > to > > Mathieu Anquetin) > > - IMPROVEMENT: Standalone runner should accept all the same parameters > as > > ant tasks (IVY-1090) > > > > Modified: ant/ivy/core/trunk/doc/ivyfile/dependency.html > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/doc/ivyfile/dependency.html?rev=789095&r1=789094&r2=789095&view=diff > > > > > ============================================================================== > > --- ant/ivy/core/trunk/doc/ivyfile/dependency.html (original) > > +++ ant/ivy/core/trunk/doc/ivyfile/dependency.html Sun Jun 28 13:02:10 > 2009 > > @@ -33,12 +33,14 @@ > > The revision can be given as a fixed one (1.5.2, for instance) or as a > > latest (or dynamic) one. Several possibilities for dynamic revisions are > > implemented in Ivy: > > <ul> > > <li>latest.integration</li> selects the latest revision of the > dependency > > module. > > -<li>latest.[any status]</li> selects the latest revision of the > dependency > > module with at least the specified status. <span class="since">since > > 1.4</span> > > +<li>latest.[any status] <span class="since">since 1.4</span></li> > selects > > the latest revision of the dependency module with at least the specified > > status. > > + > > For instance latest.milestone will select the latest version being > either > > a milestone or a release, and latest.release will only selects the latest > > release. Note that in order to find the latest revision with the > appropriate > > status Ivy has to parse all the ivy files in your repository from the > last > > one until it finds such a revision. Hence don't be surprised if the > > resolution slow down. > > See also [[settings/statuses]] to see how to configure module statuses. > > <li>end the revision with a +</li> selects the latest sub-revision of > the > > dependency module. For instance, > > if the dependency module exists in revision 1.0.3, 1.0.7 and 1.1.2, > > "1.0.+" will select 1.0.7. > > -<li>version ranges</li> mathematical notation for ranges can be used to > > match a range of version. <span class="since">since 1.4</span> > > +<li>version ranges <span class="since">since 1.4</span></li> > mathematical > > notation for ranges can be used to match a range of version. > > + > > Examples: > > [1.0,2.0] matches all versions greater or equal to 1.0 and lower or > equal > > to 2.0 > > [1.0,2.0[ matches all versions greater or equal to 1.0 and lower than > 2.0 > > @@ -116,7 +118,30 @@ > > > > Moreover, the mapping '*->@' is handled as a specific case with > > configuration intersections: it maps also the intersections. So if one > > resolve conf A+B in a module which defines a dependency with mapping > *->@, > > the mapping *->@ is interpreted as A+B->A+B so the intersection of A and > B > > will be resolved in the dependency. > > > > -<span class="since">since 1.4</span> you can add simple conditions in > the > > dependency mapping. This is done by adding a condition between '[' and > ']'. > > If the condition evaluates to <code>true</code>, the mapping is > performed. > > If the condition evaluates to <code>false</code>, the mapping will be > > ignored. For instance, <code>test->[org=A]runtime,[org=B]default</code> > > means that the <code>test</code> configuration will be mapped to the > > <code>runtime</code> conf for the dependencies of organisation 'A' and to > > the <code>default</code> conf for dependencies of organisation 'B'. > > +<span class="since">since 2.1</span> you can refer to a group of > > configurations sharing the same value for an attribute as left side part > of > > the dependency mapping. > > + > > +The syntax is > > +<code>*[att=value]</code> > > +where <em>att</em> is the name of the attribute shared by the > > configurations of the group, and <em>value</em is the value for this > > attribute that configurations must have to be part of the group. This is > > especially useful with extra attributes. > > + > > +For instance, if you have: > > +<code> > > +<configurations> > > + <conf name="red" e:axis="color" /> > > + <conf name="blue" e:axis="color" /> > > + > > + <conf name="windows" e:axis="platform" /> > > + <conf name="linux" e:axis="platform"/> > > +</configurations> > > +</code> > > + > > +Then you can do: > > +<code> > > +<dependency org="acme" name="foo" rev="2.0" > > conf="*[axis=platform]->default"/> > > +</code> > > +To map the windows and linux configurations (the one which have the > > attribute axis equal to platform) to the default configuration of foo. > > + > > +<span class="since">since 1.4</span> you can add simple conditions in > the > > right side of the dependency mapping. This is done by adding a condition > > between '[' and ']'. If the condition evaluates to <code>true</code>, the > > mapping is performed. If the condition evaluates to <code>false</code>, > the > > mapping will be ignored. For instance, > > <code>test->[org=A]runtime,[org=B]default</code> means that the > > <code>test</code> configuration will be mapped to the > <code>runtime</code> > > conf for the dependencies of organisation 'A' and to the > > <code>default</code> conf for dependencies of organisation 'B'. > > > > <li>Specify a semi-column separated list of any of the previous > > specs.</li> In this case, it is the union of the mapping which is kept. > For > > instance, 'A -> B; * -> C' means that B conf is needed in A conf and C > conf > > is need in all master conf... so both B & C dep conf are required in A > > master conf > > </ul> > > > > Added: > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java?rev=789095&view=auto > > > > > ============================================================================== > > --- > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java > > (added) > > +++ > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java > > Sun Jun 28 13:02:10 2009 > > @@ -0,0 +1,72 @@ > > +/* > > + * 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. > > + * > > + */ > > +package org.apache.ivy.core.module.descriptor; > > + > > +import java.util.Iterator; > > +import java.util.Map; > > + > > +/** > > + * A configuration which is actually a group of several configurations. > > + */ > > +public class ConfigurationGroup extends Configuration { > > + > > + private final Map/*<String, Configuration>*/ members; > > + > > + public ConfigurationGroup(String confName, Map /*<String, > > Configuration>*/ members) { > > + super(confName); > > + this.members = members; > > + } > > + > > + /** > > + * Returns the list of configurations' names this object is a group > > of. > > + * <p> > > + * This list is built from the configuration name, if some of these > > configuration names have > > + * actually not been recognized in the module, they will be > > <code>null</code> when accessed from > > + * {...@link #getIntersectedConfiguration(String)}. > > + * </p> > > + * > > + * @return the list of configurations' names this object is an > > intersection of. > > + */ > > + public String[] getMembersConfigurationNames() { > > + return (String[]) members.keySet() > > + .toArray(new String[members.size()]); > > + } > > + > > + /** > > + * Returns the {...@link Configuration} object for the given conf name, > > or > > + * <code>null</code> if the given conf name is not part of this > group > > or if this conf > > + * name isn't defined in the module in which this group has been > > built. > > + * > > + * @param confName > > + * the name of the configuration to return. > > + * @return the member {...@link Configuration} object for the given > conf > > name > > + */ > > + public Configuration getMemberConfiguration(String confName) { > > + return (Configuration) members.get(confName); > > + } > > + > > + public Visibility getVisibility() { > > + for (Iterator it = members.values().iterator(); it.hasNext();) { > > + Configuration c = (Configuration) it.next(); > > + if (c != null && > Visibility.PRIVATE.equals(c.getVisibility())) > > { > > + return Visibility.PRIVATE; > > + } > > + } > > + return Visibility.PUBLIC; > > + } > > +} > > > > Propchange: > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/ConfigurationGroup.java > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = text/plain > > > > Modified: > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java?rev=789095&r1=789094&r2=789095&view=diff > > > > > ============================================================================== > > --- > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java > > (original) > > +++ > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultDependencyDescriptor.java > > Sun Jun 28 13:02:10 2009 > > @@ -305,20 +305,37 @@ > > } > > } > > } > > + List confsList = (List) confs.get(moduleConfiguration); > > + if (confsList != null) { > > + intersectedDepConfs.addAll(confsList); > > + } > > if (intersectedDepConfs.isEmpty()) { > > List defConfs = (List) confs.get("*"); > > if (defConfs != null) { > > for (Iterator it = defConfs.iterator(); > > it.hasNext();) { > > String mappedConf = (String) it.next(); > > if (mappedConf != null && > > mappedConf.startsWith("@+")) { > > - return new String[] {moduleConfiguration > + > > mappedConf.substring(1)}; > > + return new String[] { > > + moduleConfiguration + > > mappedConf.substring(1)}; > > } else if (mappedConf != null && > > mappedConf.equals("@")) { > > return new String[] > {moduleConfiguration}; > > } > > } > > } > > } > > - return (String[]) intersectedDepConfs.toArray(new > > String[intersectedDepConfs.size()]); > > + return (String[]) intersectedDepConfs.toArray( > > + new String[intersectedDepConfs.size()]); > > + } else if (c instanceof ConfigurationGroup) { > > + ConfigurationGroup group = (ConfigurationGroup) c; > > + Set /*<String>*/ groupDepConfs = new HashSet(); > > + String[] members = group.getMembersConfigurationNames(); > > + for (int i = 0; i < members.length; i++) { > > + Collection depConfs = > > + getDependencyConfigurationsIncludingExtending( > > + members[i], requestedConfiguration); > > + groupDepConfs.addAll(depConfs); > > + } > > + return (String[]) groupDepConfs.toArray(new > > String[groupDepConfs.size()]); > > } > > } > > > > @@ -532,6 +549,14 @@ > > + "' to configuration '" + masterConf + "' of module > " > > + md.getModuleRevisionId() + " because this > > configuration doesn't exist!"); > > } > > + if (config instanceof ConfigurationGroup) { > > + ConfigurationGroup group = (ConfigurationGroup) config; > > + String[] members = group.getMembersConfigurationNames(); > > + for (int i = 0; i < members.length; i++) { > > + addDependencyConfiguration(members[i], depConf); > > + } > > + return; > > + } > > } > > > > List confsList = (List) confs.get(masterConf); > > > > Modified: > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java?rev=789095&r1=789094&r2=789095&view=diff > > > > > ============================================================================== > > --- > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java > > (original) > > +++ > > > ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/descriptor/DefaultModuleDescriptor.java > > Sun Jun 28 13:02:10 2009 > > @@ -23,7 +23,6 @@ > > import java.util.ArrayList; > > import java.util.Arrays; > > import java.util.Collection; > > -import java.util.Collections; > > import java.util.Date; > > import java.util.HashMap; > > import java.util.Iterator; > > @@ -33,6 +32,8 @@ > > import java.util.Map; > > import java.util.Set; > > import java.util.Stack; > > +import java.util.regex.Matcher; > > +import java.util.regex.Pattern; > > > > import org.apache.ivy.core.module.id.ArtifactId; > > import org.apache.ivy.core.module.id.ModuleId; > > @@ -337,19 +338,27 @@ > > * @param artifact > > */ > > public void addArtifact(String conf, Artifact artifact) { > > - if (!configurations.containsKey(conf)) { > > + Configuration c = getConfiguration(conf); > > + if (c == null) { > > throw new IllegalArgumentException("Cannot add artifact '" + > > artifact.getId().getArtifactId().getShortDescription() > > + "' to configuration '" + conf + "' of module " + > > revId > > + " because this configuration doesn't exist!"); > > } > > - > > - Collection artifacts = (Collection) artifactsByConf.get(conf); > > - if (artifacts == null) { > > - artifacts = new ArrayList(); > > - artifactsByConf.put(conf, artifacts); > > + if (c instanceof ConfigurationGroup) { > > + ConfigurationGroup group = (ConfigurationGroup) c; > > + String[] members = group.getMembersConfigurationNames(); > > + for (int i = 0; i < members.length; i++) { > > + addArtifact(members[i], artifact); > > + } > > + } else { > > + Collection artifacts = (Collection) > artifactsByConf.get(conf); > > + if (artifacts == null) { > > + artifacts = new ArrayList(); > > + artifactsByConf.put(conf, artifacts); > > + } > > + artifacts.add(artifact); > > + this.artifacts.add(artifact); > > } > > - artifacts.add(artifact); > > - this.artifacts.add(artifact); > > } > > > > public ModuleRevisionId getModuleRevisionId() { > > @@ -391,6 +400,23 @@ > > public Configuration getConfiguration(String confName) { > > Configuration configuration = (Configuration) > > configurations.get(confName); > > if (configuration == null && confName != null) { > > + // let's first check if the configuration is a conf group > > + Matcher m = > > Pattern.compile("\\*\\[([^=]+)\\=([^\\]]+)\\]").matcher(confName); > > + if (m.matches()) { > > + String attName = m.group(1); > > + String attValue = m.group(2); > > + > > + // this is a conf group, let's search for its members > > + Map /*<String,Configuration>*/ members = new > > LinkedHashMap(); > > + for (Iterator it = configurations.values().iterator(); > > it.hasNext();) { > > + Configuration conf = (Configuration) it.next(); > > + if (attValue.equals(conf.getAttribute(attName))) { > > + members.put(conf.getName(), conf); > > + } > > + } > > + return new ConfigurationGroup(confName, members); > > + } > > + > > // let's see if a configuration intersection is requested > > String[] confs = confName.split("\\+"); > > if (confs.length <= 1) { > > @@ -413,32 +439,51 @@ > > } > > > > public Artifact[] getArtifacts(String conf) { > > + Configuration c = getConfiguration(conf); > > + if (c == null) { > > + return new Artifact[0]; > > + } > > Collection artifacts = (Collection) artifactsByConf.get(conf); > > - if (artifacts == null) { > > - Configuration c = getConfiguration(conf); > > - if (c instanceof ConfigurationIntersection) { > > - ConfigurationIntersection intersection = > > (ConfigurationIntersection) c; > > - String[] intersected = > > intersection.getIntersectedConfigurationNames(); > > - Set/*<Artifact>*/ intersectedArtifacts = new > > LinkedHashSet(); > > - for (int j = 0; j < intersected.length; j++) { > > - Collection arts = > > getArtifactsIncludingExtending(intersected[j]); > > - if (intersectedArtifacts.isEmpty()) { > > - intersectedArtifacts.addAll(arts); > > - } else { > > - intersectedArtifacts.retainAll(arts); > > - } > > + if (c instanceof ConfigurationIntersection) { > > + ConfigurationIntersection intersection = > > (ConfigurationIntersection) c; > > + String[] intersected = > > intersection.getIntersectedConfigurationNames(); > > + Set/*<Artifact>*/ intersectedArtifacts = new > LinkedHashSet(); > > + for (int j = 0; j < intersected.length; j++) { > > + Collection arts = > > getArtifactsIncludingExtending(intersected[j]); > > + if (intersectedArtifacts.isEmpty()) { > > + intersectedArtifacts.addAll(arts); > > + } else { > > + intersectedArtifacts.retainAll(arts); > > } > > - return (Artifact[]) intersectedArtifacts.toArray(new > > Artifact[intersectedArtifacts.size()]); > > - } else { > > - return new Artifact[0]; > > } > > + if (artifacts != null) { > > + intersectedArtifacts.addAll(artifacts); > > + } > > + return (Artifact[]) intersectedArtifacts.toArray( > > + new Artifact[intersectedArtifacts.size()]); > > + } else if (c instanceof ConfigurationGroup) { > > + ConfigurationGroup group = (ConfigurationGroup) c; > > + String[] members = group.getMembersConfigurationNames(); > > + Set/*<Artifact>*/ groupArtifacts = new LinkedHashSet(); > > + for (int i = 0; i < members.length; i++) { > > + > > groupArtifacts.addAll(getArtifactsIncludingExtending(members[i])); > > + } > > + if (artifacts != null) { > > + groupArtifacts.addAll(artifacts); > > + } > > + return (Artifact[]) groupArtifacts.toArray(new > > Artifact[groupArtifacts.size()]); > > } else { > > - return (Artifact[]) artifacts.toArray(new > > Artifact[artifacts.size()]); > > + if (artifacts == null) { > > + return new Artifact[0]; > > + } else { > > + return (Artifact[]) artifacts.toArray(new > > Artifact[artifacts.size()]); > > + } > > } > > } > > > > private Collection/*<Artifact>*/ > getArtifactsIncludingExtending(String > > conf) { > > - Collection extendingConfs = > > Configuration.findConfigurationExtending(conf, getConfigurations()); > > + Collection extendingConfs = > > Configuration.findConfigurationExtending( > > + conf, > > getConfigurations()); > > Set/*<Artifact>*/ artifacts = new LinkedHashSet(); > > Collection arts = (Collection) artifactsByConf.get(conf); > > if (arts != null) { > > > > Modified: > > ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java?rev=789095&r1=789094&r2=789095&view=diff > > > > > ============================================================================== > > --- > > ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java > > (original) > > +++ > > ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveTest.java > > Sun Jun 28 13:02:10 2009 > > @@ -3747,6 +3747,31 @@ > > assertFalse(getArchiveFileInCache("org2", "mod2.8", "0.6", > > "art28-windows-debug", "jar", "jar").exists()); > > } > > > > + public void testConfigurationGroups() throws Exception { > > + // mod5.2;3.1 -> mod5.1;4.5 (*->@) > > + // mod5.1;4.5 -> mod1.2;2.0 (B,*[axis=platform]->default) > > + // mod5.1;4.5 -> mod2.2;0.9 > (B,windows->myconf1;B,linux->myconf2) > > + // mod5.1;4.5 -> mod2.1;0.5 (B,windows->A+B) > > + // mod5.1;4.5 -> mod2.8;0.6 > (windows,linux->@+thread+debug;A,B->*) > > + ivy.resolve(new > > File("test/repositories/2/mod5.2/ivy-3.1.xml").toURL(), > > + getResolveOptions(new String[] {"B+linux"})); > > + > > + assertFalse(getArchiveFileInCache("org5", "mod5.1", "4.5", > > "art51A", "jar", "jar").exists()); > > + assertTrue(getArchiveFileInCache("org5", "mod5.1", "4.5", > > "art51B", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org5", "mod5.1", "4.5", > > "art51B", "dll", "dll").exists()); > > + assertTrue(getArchiveFileInCache("org5", "mod5.1", "4.5", > > "art51B", "so", "so").exists()); > > + assertTrue(getArchiveFileInCache("org1", "mod1.2", "2.0", > > "mod1.2", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.2", "0.9", > > "art22-1", "jar", "jar").exists()); > > + assertTrue(getArchiveFileInCache("org2", "mod2.2", "0.9", > > "art22-2", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.1", "0.5", > > "art21A", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.1", "0.5", > > "art21B", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.1", "0.5", > > "art21AB", "jar", "jar").exists()); > > + assertTrue(getArchiveFileInCache("org2", "mod2.8", "0.6", > > "art28-linux-debug-thread", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.8", "0.6", > > "art28-linux-debug", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.8", "0.6", > > "art28-windows-debug-thread", "jar", "jar").exists()); > > + assertFalse(getArchiveFileInCache("org2", "mod2.8", "0.6", > > "art28-windows-debug", "jar", "jar").exists()); > > + } > > + > > public void testResolveFallbackConfiguration() throws Exception { > > // mod10.2 depends on mod5.1 conf runtime(default) > > ivy.resolve(new > > File("test/repositories/2/mod10.2/ivy-1.0.xml").toURL(), > > > > Added: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.dll > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.dll?rev=789095&view=auto > > > > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.dll > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.jar > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.jar?rev=789095&view=auto > > > > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.jar > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.so > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.so?rev=789095&view=auto > > > > > ============================================================================== > > Binary file - no diff available. > > > > Propchange: ant/ivy/core/trunk/test/repositories/2/mod5.1/art51B-4.5.so > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = application/octet-stream > > > > Added: ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml?rev=789095&view=auto > > > > > ============================================================================== > > --- ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml (added) > > +++ ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml Sun Jun 28 > > 13:02:10 2009 > > @@ -0,0 +1,45 @@ > > +<!-- > > + 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. > > +--> > > +<ivy-module version="1.0" xmlns:e="http://ant.apache.org/ivy/extra"> > > + <info organisation="org5" > > + module="mod5.1" > > + revision="4.5" > > + status="integration" > > + publication="20090501110000" > > + /> > > + <configurations> > > + <conf name="A" /> > > + <conf name="B" /> > > + > > + <conf name="windows" e:axis="platform" /> > > + <conf name="linux" e:axis="platform"/> > > + </configurations> > > + <publications> > > + <artifact name="art51A" type="jar" > > conf="A,*[axis=platform]"/> > > + <artifact name="art51B" type="jar" > > conf="B,*[axis=platform]"/> > > + <artifact name="art51B" type="dll" conf="B,windows"/> > > + <artifact name="art51B" type="so" conf="B,linux"/> > > + </publications> > > + <dependencies> > > + <dependency org="org1" name="mod1.2" rev="2.0" > > conf="B,*[axis=platform]->default"/> > > + <dependency org="org2" name="mod2.2" rev="0.9" > > conf="B,windows->myconf1;B,linux->myconf2"/> > > + <dependency org="org2" name="mod2.1" rev="0.5" > > conf="B,windows->A+B"/> > > + <dependency org="org2" name="mod2.8" rev="0.6" > > conf="windows,linux->@+thread+debug;A,B->*"/> > > + </dependencies> > > +</ivy-module> > > > > Propchange: ant/ivy/core/trunk/test/repositories/2/mod5.1/ivy-4.5.xml > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = text/plain > > > > Added: ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml > > URL: > > > http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml?rev=789095&view=auto > > > > > ============================================================================== > > --- ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml (added) > > +++ ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml Sun Jun 28 > > 13:02:10 2009 > > @@ -0,0 +1,37 @@ > > +<!-- > > + 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. > > +--> > > +<ivy-module version="1.0"> > > + <info organisation="org5" > > + module="mod5.2" > > + revision="3.1" > > + status="integration" > > + publication="20090601110000" > > + /> > > + <configurations> > > + <conf name="A"/> > > + <conf name="B"/> > > + > > + <conf name="windows"/> > > + <conf name="linux"/> > > + </configurations> > > + <publications /> > > + <dependencies> > > + <dependency name="mod5.1" rev="4.5" conf="*->@"/> > > + </dependencies> > > +</ivy-module> > > > > Propchange: ant/ivy/core/trunk/test/repositories/2/mod5.2/ivy-3.1.xml > > > > > ------------------------------------------------------------------------------ > > svn:mime-type = text/plain > > > > > > > -- Xavier Hanin - 4SH France BordeauxJUG co leader - http://www.bordeauxjug.org/ Blogger - http://xhab.blogspot.com/ Apache Ivy Creator - http://ant.apache.org/ivy/