【问题标题】:Ant 1.8 include or import with nested resource collectionAnt 1.8 包含或导入嵌套资源集合
【发布时间】:2010-06-11 20:37:14
【问题描述】:

我想让 Ant 自动包含或导入与特定模式匹配的资源,但我真的在语法上苦苦挣扎。这是我尝试过的:

<import>
    <fileset dir="${basedir}" includes="*-graph.xml" />
</import>

但是,我只是收到错误消息

import requires file attribute or at least one nested resource

导入(和包含)的文档都说您可以使用嵌套资源集合,资源集合的文档说 是一个资源集合。我用谷歌搜索了,根本找不到任何有用的例子。

我使用的是 Ant 1.8.1(通过 ant -version 验证)

编辑

发现问题。首先,SOMETHING 必须匹配表达式。如果没有匹配的文件,它就会爆炸 - 即使使用 optional=true,这很奇怪!其次,匹配的文件必须是有效的 Ant 文件(即使它们只包含 - 仅仅创建一个空文件是不够的)。

更好的错误信息,请阿帕奇! :-)

【问题讨论】:

    标签: ant


    【解决方案1】:

    试试:

    <foreach target="-import" param="file.name">
      <fileset dir="${basedir}" includes="*-graph.xml" />
    </foreach>
    
    <target name="-import">
      <import file="${file.name}" />
    </target>
    

    在 ant-contrib 任务中 (http://ant-contrib.sourceforge.net/tasks/tasks/index.html) 我不确定这是否可行,我只是临时想出来的。

    【讨论】:

    • 我想它会,但我拼命地试图摆脱尽可能多的 ant-contrib 东西。我正在尝试简化一个 20 万亿行的构建脚本,该脚本使用大量的 ant-contrib 来尝试做程序性的事情,而不是让 ant 以声明的方式处理事情。 Ant 1.8 和扩展点是我在这条路线上的第一步。
    【解决方案2】:

    这里有一个简单的方法来处理这个问题:

    <project name="the-name-of-the-project">
      <import>
        <fileset dir="${basedir}" includes="*-graph.xml"  erroronmissingdir="false"/>
        <fileset file="${ant.file.the-name-of-the-project}"/>
      </import>
    </project>
    

    这样,导入的文件集永远不会为空,因为它包含包含此声明的文件。这仅适用于&lt;import&gt; 指令,因为它忽略了已导入的文件; &lt;include&gt; 指令很容易导致递归。

    请注意,如果basedir 始终存在,erroronmissingdir="false" 是可选的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多