如何分别发布模型与完整项目工件?

时间:2014-07-28 20:40:24

标签: ivy

ivy如何支持多个阶段的项目发布工件?

假设我们有项目A和B. A取决于B的模型而B取决于A的模型。 (通常循环依赖不是直接的,但是示例服务。我们的项目相对松散耦合,通过模型相互发送消息)模型本身并不依赖于任何东西,所以我很容易构建那些工件。但是,虽然我可以构建moduleA-models.jar,但在获得moduleB-models.jar之前,我无法构建moduleA.jar。 (当然,对于模块B,反之亦然。)

因此,我正在考虑进行两阶段发布工作。我正是这样做的。我有一个蚂蚁目标,建立模型,然后发布'模型'常春藤conf。我浏览了构建/发布模型的所有项目。然后我回过头来开始构建项目代码的其余部分。请注意,“返回并构建项目代码的其余部分'暗示一个新的发布调用......这次是所有工件,而不仅仅是模型工件。

然而常春藤却对它略显不满。例如,它有时会看到模块A已发布的'只使用模型jar的ivy.xml,然后可能会发现模块A的更新的ivy.xml,其中包含模型和非模型jar。总的来说,我可以通过改变=" true"'来解决这个问题。依赖标志。

然而,最近即使这对我来说也是失败的,常春藤正在尝试不按顺序建造项目,从而失败。此外,我偶尔也会遇到一个项目缺失版本的问题(由于它在同一个构建周期中看到了项目的两个不同版本的ivy.xml)。

那么推荐的方法是什么?也许单独的常春藤项目(在相同的文件结构中)?

1 个答案:

答案 0 :(得分:1)

为什么不将项目构建为具有构建和发布包含消息模型类的jar的公共模块?

├── build.xml
├── common
│   ├── build.xml
│   ├── ivy.xml
│   └── src
|       ..
├── module1
│   ├── build.xml
│   ├── ivy.xml
│   └── src
|       ..
└── module2
    ├── build.xml
    ├── ivy.xml
    └── src
        ..

然后,每个模块都可以依赖这些公共依赖项:

<dependency org="myproj.common" name="module1-model" rev="1.0"/>

根构建文件可以使用buildlist任务根据常春藤文件依赖性确定模块构建顺序。

<target name="determine-build-order">
    <ivy:buildlist reference="build-path">
        <fileset dir="." includes="modules/**/build.xml"/>
    </ivy:buildlist>
</target>

<target name="build" depends="determine-build-order">
    <subant target="build" buildpathref="build-path" />
</target>