Ivy
  1. Ivy
  2. IVY-1356

ivy descriptors are merged incorrectly

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.0
    • Fix Version/s: 2.3.0-RC2
    • Component/s: Core
    • Labels:

      Description

      I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

      Parent file is typically something like:

      
      <ivy-module version="2.0" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                  xmlns:m="http://ant.apache.org/ivy/maven">    
          <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
          </info>
          
          <configurations>
              <conf name="default" description="Default dependencies"/>
              <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
              <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
              <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
              <conf name="sources" description="Sources"/>
              <conf name="javadoc" description="Javadoc"/>
          </configurations>
          
          <dependencies>
              <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
          </dependencies>
      
      </ivy-module>
      

      Ivy file for the project is typically:

      <ivy-module version="2.0" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                  xmlns:m="http://ant.apache.org/ivy/maven">
          <info organisation="com.mycompany.service" module="${project.name}">
              <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
              
          </info>
      
          <publications>
              <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
              <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
              <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
          </publications>
          <dependencies>
              <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="default"/>
              <exclude org="javax.servlet" module="servlet-api"/>
              <exclude org="javax.servlet" module="servlet"/>
          </dependencies>
      </ivy-module>
      
      

      The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

      <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
          <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
              <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->
      
          </info>
          <configurations>
          
              <!-- configurations inherited from com.mycompany#parent;1.0.0 -->
              <conf name="default" visibility="public" description="Default dependencies"/>
              <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
              <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
              <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
              <conf name="sources" visibility="public" description="Sources"/>
              <conf name="javadoc" visibility="public" description="Javadoc"/>
          </configurations>
          <publications>
              <artifact name="myproject" type="jar" ext="jar" conf="default"/>
              <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
              <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
          </publications>
          <dependencies>
              
              
              <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>
      
              <exclude org="javax.servlet" module="servlet-api"/>
              <exclude org="javax.servlet" module="servlet"/>
          
              <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
              <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
      conf="default->api;newrelic->default"/>
          </dependencies>
      </ivy-module>
      
      

        Activity

        Stephane Bailliez created issue -
        Stephane Bailliez made changes -
        Field Original Value New Value
        Description I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="compile->default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.giltgroupe#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.giltgroupe#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="compile->default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.giltgroupe#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        Stephane Bailliez made changes -
        Description I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="compile->default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.giltgroupe#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="compile->default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.mycompany#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        Stephane Bailliez made changes -
        Description I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="compile->default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.mycompany#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        I'm making use of parent definition in ivy files to define general dependencies and configuration across projects.

        Parent file is typically something like:

        {code}

        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany" module="parent" revision="1.0" status="release" publication="20120101020304">
            </info>
            
            <configurations>
                <conf name="default" description="Default dependencies"/>
                <conf name="runtime" description="Only runtime" extends="default" visibility="private"/>
                <conf name="test" description="Only for unit testing" extends="compile,runtime" visibility="private"/>
                <conf name="compile" description="Only for compilation" extends="default" visibility="private"/>
                <conf name="sources" description="Sources"/>
                <conf name="javadoc" description="Javadoc"/>
            </configurations>
            
            <dependencies>
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
            </dependencies>

        </ivy-module>
        {code}

        Ivy file for the project is typically:


        {code}
        <ivy-module version="2.0"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
                    xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="${project.name}">
                <extends organisation="com.mycompany" module="parent" revision="${ivy.parent.revision}" location="${ivy.parent.location}"/>
                
            </info>

            <publications>
                <artifact name="${project.name}" type="jar" ext="jar" conf="default"/>
                <artifact name="${project.name}" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="${project.name}" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                <dependency org="org.jackson" name="jackson" rev="1.9.5" conf="default"/>
                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            </dependencies>
        </ivy-module>

        {code}

        The result end up being a merge which is incompatible with the schema since dependency and exclude end up being mixed when the file is delivered:

        {code}
        <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:m="http://ant.apache.org/ivy/maven">
            <info organisation="com.mycompany.service" module="myproject" revision="1.2.8.20120604181037" status="development" publication="20120604141056">
                <!-- <extends organisation="com.mycompany" module="parent" revision="1.0.0" location="/somewhere/ivy-parent.xml"/> -->

            </info>
            <configurations>
            
                <!-- configurations inherited from com.mycompany#parent;1.0.0 -->
                <conf name="default" visibility="public" description="Default dependencies"/>
                <conf name="runtime" visibility="private" description="Only runtime" extends="default"/>
                <conf name="test" visibility="private" description="Only for unit testing" extends="compile,runtime"/>
                <conf name="compile" visibility="private" description="Only for compilation" extends="default"/>
                <conf name="sources" visibility="public" description="Sources"/>
                <conf name="javadoc" visibility="public" description="Javadoc"/>
            </configurations>
            <publications>
                <artifact name="myproject" type="jar" ext="jar" conf="default"/>
                <artifact name="myproject" type="source" ext="jar" conf="sources" m:classifier="sources"/>
                <artifact name="myproject" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
            </publications>
            <dependencies>
                
                
                <dependency org="org.codehaus" name="jackson" rev="1.9.5" conf="default"/>

                <exclude org="javax.servlet" module="servlet-api"/>
                <exclude org="javax.servlet" module="servlet"/>
            
                <!-- dependencies inherited from com.mycompany#parent;1.0.0 -->
                <dependency org="org.testng" name="testng" rev="6.4" conf="test->default"/>
        conf="default->api;newrelic->default"/>
            </dependencies>
        </ivy-module>

        {code}
        Nicolas Lalevée made changes -
        Labels testcase
        Hide
        Maarten Coene added a comment -

        Will be fixed in next release.
        Thanks for reporting.

        Show
        Maarten Coene added a comment - Will be fixed in next release. Thanks for reporting.
        Maarten Coene made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Assignee Maarten Coene [ maartenc ]
        Fix Version/s 2.3.0 [ 12320743 ]
        Resolution Fixed [ 1 ]

          People

          • Assignee:
            Maarten Coene
            Reporter:
            Stephane Bailliez
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development