在一个依赖性问题上发布多个常春藤模块

时间:2013-09-04 20:26:06

标签: ant ivy

我正在使用常春藤来管理一堆彼此依赖的deb文件。我正在为每个deb生成常春藤文件,并在需要时添加依赖项。我正在尝试发布,但它要求我先做一个解决步骤。

我没有解决,因为还没有任何模块在常春藤回购中。这些是运行时依赖项,我正在使用它们来从常春藤仓库中取出deb文件的配置。

我尝试了ivy src附带的'multi-project'示例,发现如果你尝试发布'size'项目,它也会以同样的方式失败;之前我做过ant clean-all来模拟没有任何工件/元数据作为回购。我注意到它正在使用<ivy:buildlist />http://ant.apache.org/ivy/history/latest-milestone/use/buildlist.html

这似乎不起作用。我使用生成的列表按顺序执行发布并获得相同的问题。

为什么我的buildlist会让我回到它里面的同一个文件集?

    <target name="publish-shared" depends="" description="--> Publish project's artifacts to SHARED repository">
            <ivy:buildlist reference="ivy.dep.files">
                    <fileset dir="${ivy.build.dir}" includes="**/ivy.xml"/>
            </ivy:buildlist>
            <for param="ivy.dep.file" list="${toString:ivy.dep.files}" delimiter=":">
                    <sequential>
                            <antcall target="publish-shared-onemod" inheritAll="true" inheritRefs="true">
                                    <param name="ivy.dep.file" value="@{ivy.dep.file}" />
                            </antcall>
                    </sequential>
            </for>
    </target>
    <target name="publish-shared-onemod">
            <ivy:resolve />
            <ivy:publish resolver="shared" artifactspattern="${target.dir}/[artifact].[ext]" status="integration" />
    </target>

更新 我不得不反转构建列表<ivy:buildlist reference="ivy.dep.files" reverse="true"> 但是非常奇怪的是,当我指定一个根模块(例如:<ivy:buildlist reference="ivy.dep.files" root="${ivy.module.root}">)时,它不需要反向。我一定是做错了,但直到我收到错误,我才会逆转。

1 个答案:

答案 0 :(得分:0)

为什么不让每个子模块执行它自己的常春藤解析和发布,而不是从父版本脚本中发布?

buildlist任务将确定正确的构建顺序,然后每个子模块将逐步构建下一个子模块的依赖项:

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

<target name="publish" depends="build-list">
    <subant target="publish" buildpathref="build-path" />
</target>

注意:

  • subant任务是&#34; for&#34;的简单替代方案。任务是对ant-contrib的外部依赖。