【问题标题】:Publish multiple ivy modules at ones dependency issue在一个依赖问题上发布多个常春藤模块
【发布时间】:2013-09-06 23:24:30
【问题描述】:

我正在使用 ivy 管理一堆相互依赖的 deb 文件。我正在为每个 deb 生成常春藤文件并在需要的地方添加依赖项。我正在尝试发布,但它要求我先执行解决步骤。

我无法解决,因为 ivy 存储库中还没有任何模块。这些是运行时依赖项,我使用它们能够从 ivy repo 中提取 deb 文件的配置。

我尝试了 ivy src 附带的示例“多项目”,发现如果您尝试发布“大小”项目,它也会以同样的方式失败;我之前做了一个ant clean-all 来模拟没有工件/元数据是回购。我注意到它正在使用<ivy:buildlist /> (http://ant.apache.org/ivy/history/latest-milestone/use/buildlist.html)

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

为什么我的构建列表会返回与其中相同的文件集?

    <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>

更新: 我不得不反转构建列表&lt;ivy:buildlist reference="ivy.dep.files" reverse="true"&gt; 但非常奇怪的是,当我指定一个根模块(例如:&lt;ivy:buildlist reference="ivy.dep.files" root="${ivy.module.root}"&gt;)时,它不需要反向。我一定是做错了什么,但在我遇到错误之前,我会使用反向操作。

【问题讨论】:

  • 更多信息:我正在通过 CMake 进程生成 debian pkgs。 ivy.xml 文件也生成它们的长边。因此,我的每个项目都没有 build.xml 文件。我希望在我的构建目录的根目录中使用一个 ant 脚本来解决这个问题。
  • 我试过这个并在我的 echo 语句中得到了等效的输出 &lt;path id="tmp"&gt; &lt;fileset dir="${ivy.build.dir}" includes="**/ivy.xml"/&gt; &lt;/path&gt; &lt;ivy:buildlist reference="ivy.dep.files"&gt; &lt;fileset dir="${ivy.build.dir}" includes="**/ivy.xml"/&gt; &lt;/ivy:buildlist&gt; &lt;echo&gt;ivy.dep.files=${toString:ivy.dep.files}**************tmp=${toString:tmp}&lt;/echo&gt;

标签: ant ivy


【解决方案1】:

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

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 任务是“for”任务的更简单替代方案,后者是对 ant-contrib 的外部依赖。

【讨论】:

  • 我不能按照你建议的方式做,因为我没有每个模块的 ant 脚本
猜你喜欢
  • 2012-12-23
  • 2012-01-10
  • 2017-08-06
  • 1970-01-01
  • 2012-01-08
  • 2014-05-07
  • 2012-09-11
  • 2013-10-14
  • 2010-11-06
相关资源
最近更新 更多