如何阻止Ivy解决方案的状态

时间:2010-07-20 09:25:05

标签: ant build-process ivy

在我们公司,我们使用每个人都包含的基本ant文件进行构建。它包含我们想要全局和统一定义的内容,如构建测试,测试覆盖,构建发布,在常春藤上发布等。

我想强制执行在创建发布版本的常春藤解析中,拒绝具有测试(集成)状态的库。基本上,对于发布版本,您只能使用发布类库。

但是,我找不到在常春藤解析ant任务中强制执行此操作的方法(不在ivy.xml文件中)。

有人知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

选项1

严格来说,你有两套已解析的库,所以这可以通过拥有两个常春藤文件来解决。一个列出了对最新集成的依赖性,另一个列出了最新版本的其他版本。

然后,build.xml文件将具有两个分辨率目标,由发布属性

控制
<target name="resolve-int" unless="release.build">
    <ivy:resolve file="ivy-int.xml"/>
</target>

<target name="resolve-rel" if="release.build">
    <ivy:resolve file="ivy-rel.xml"/>
</target>

<target name="resolve" depends="resolve-int,resolve-rel"/>

选项2

使用属性确定所需的动态修订:

<强>的ivy.xml

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="${dynamic.revision}"/>
    </dependencies>
</ivy-module>

<强>的build.xml

属性 dynamic.revision 的默认值为 latest.integration

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="demo-ivy" default="resolve">

    <property name="dynamic.revision" value="latest.integration"/>

    <target name="resolve">
        <ivy:resolve/>
    </target>

    ..    

</project>

然后,发布版本将覆盖此值,可能来自命令行,如下所示:

ant -Ddynamic.revision=latest.release