蚂蚁,常春藤,多个项目和传递依赖

时间:2013-04-25 23:32:03

标签: web-applications ant ivy

我有两个项目,A和B,B是一个webapp。项目B依赖于A,因此A的ivy.xml看起来像:

<ivy-module version="2.0">
  <info organisation="com.confused" module="B" status="integration"/>    

  <dependencies>
    <!-- confused dependencies -->
    <dependency name="A" rev="latest.integration"/>

    <!-- 3rd party dependencies -->
    <dependency org="org.springframework" name="spring-core" rev="3.2.2.RELEASE"/>
    <dependency org="org.springframework" name="spring-jdbc" rev="3.2.2.RELEASE"/>
    <dependency org="org.springframework" name="spring-webmvc" rev="3.2.2.RELEASE"/>
  </dependencies>
</ivy-module>

类似的东西......我的A模块看起来像:

<ivy-module version="2.0">
  <info organisation="com.confused" module="A" status="integration"/>    

  <dependencies>
    <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5"/>
    <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.11"/>
    <dependency org="ch.qos.logback" name="logback-core" rev="1.0.11"/>
  </dependencies>
</ivy-module>

一切都很好......除了:

当我构建B时,lib目录中填充了弹簧罐和A.jar。很好,但如果我想'部署'我的webapp,我需要将这些罐子复制到WEB-INF / lib以及A依赖的日志罐子。我如何让蚂蚁/常春藤'解决'罐子?

1 个答案:

答案 0 :(得分:2)

您没有将依赖项所依赖的配置放在......

有一种非官方的配置,与ivy.xml文件中使用的Maven配置相匹配。这个ivy.template.xml文件使用它们,我的开发人员可以使用它们来创建ivy.xml个文件。

您需要做的是映射您的配置。这是A的ivy.xml文件:

<ivy-module version="2.0">
    <info organisation="com.confused" module="A" status="integration"/>    

    <configurations>
        <configuration .../>
        <!-- These are the configurations from the ivy.template.xml file -->
    </configurations>

    <dependencies>
        <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5"
            conf="compile->default"/>
        <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.11"
            conf="compile->default"/>
        <dependency org="ch.qos.logback" name="logback-core" rev="1.0.11"
            conf="compile->default"/>
    </dependencies>
</ivy-module>

注意conf映射! compile->default表示将其用于编译时和运行时依赖项。通过将其映射到default,您不仅会下载此特定jar,还会下载所有传递依赖项。

现在,您对{B}的ivy.xml将如下所示:

<ivy-module version="2.0">
    <info organisation="com.confused" module="B" status="integration"/>    

    <configurations>
        <configuration .../>
        <!-- These are the configurations from the ivy.template.xml file -->
    </configurations>

    <dependencies>
        <!-- Don't forget the organisation field!-->
        <dependency org="com.confused" name="A" rev="latest.integration"
            conf="compile->default"/>

        <!-- 3rd party dependencies -->
        <dependency org="org.springframework" name="spring-core" rev="3.2.2.RELEASE"
            conf="compile->default"/>
        <dependency org="org.springframework" name="spring-jdbc" rev="3.2.2.RELEASE"
            conf="compile->default"/>
        <dependency org="org.springframework" name="spring-webmvc" rev="3.2.2.RELEASE"
            conf="compile->default"/>
    </dependencies>
</ivy-module>

您的项目A的jar及其依赖项只是您的项目“B”所依赖的另一组jar。

当然,在“B”可以使用它之前,你必须publish A罐到你的常春藤存储库。