【问题标题】:Can I use an Ant fileset as input to construct another fileset?我可以使用 Ant 文件集作为输入来构造另一个文件集吗?
【发布时间】:2016-10-11 13:05:19
【问题描述】:

我正在使用 Jenkins 和 Ant 构建步骤自动化构建过程。我的构建操作和构建后源代码控制标记工作正常。

在构建了多个 QT 项目之后,我希望能够从构建中保留有用的工件。

作为讨论/考虑的工具,假设我在构建目录中有以下文件集:

MyApp.exe
MyApp.pdb
MyApp_Tests.exe
MyApp_Tests.pdb
SomeLib.lib
SomeLib.pdb
3rdParty.lib
3rdParty.pdb
Utils.dll
Utils.pdb

(实际上,还有更多的 exe、dll 的 lib 及其关联的 pdb 文件以及构建生成的文件随着项目的发展而频繁更改。)

我想收集“可交付”文件(非测试 exe 和 dll)及其 pdb 文件没有测试 exe、lib 文件及其 pdb 文件。

我相信我可以获得可交付文件的文件集以用于复制任务:

<copy todir="${artifactDestination}" failonerror="true">
    <fileset dir="./build">
        <include name="*.exe" />
        <include name="*.dll" />
        <exclude name="*_Tests*" />
    </fileset>
</copy>

我正在苦苦挣扎的是如何获取与 exe 和 dll 文件相关的 pdb 文件的文件集,即除 MyApp_Tests.pdb、SomeLib.pdb 和 3rdParty.pdb 之外的所有 pdb 文件。

我想做的是使用 exe 和 dll 文件的初始文件集,并从具有扩展名为 .pdb 而不是 .dll 或 .exe 的文件名的文件创建第二个文件集。

我一直在阅读选择器等内容,但未能找到实现我想要的结果的解决方案。

有什么建议吗?

【问题讨论】:

    标签: ant


    【解决方案1】:

    您应该能够通过两个后续的copy 任务来实现您想要的。第一个是你已经弄清楚的那个。为了复制与您在第一步中复制的文件匹配的.pdb 文件,您可以使用present 选择器。

    <copy todir="${artifactDestination}" failonerror="true">
      <fileset dir="build">
        <or>
          <present targetdir="${artifactDestination}">
            <globmapper from="*.pdb" to="*.exe"/>
          </present>
          <present targetdir="${artifactDestination}">
            <globmapper from="*.pdb" to="*.dll"/>
          </present>
        </or>
      </fileset>
    </copy>
    

    【讨论】:

    • 我曾尝试在第二个副本中使用globmapper,但只实现了将第一个文件复制到具有不同文件扩展名的目标。看起来我在思考(几乎)正确的路线,但你的提议正是我所需要的。谢谢@StefanBodewig
    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多