【问题标题】:How can I exclude files from a reference path in Ant?如何从 Ant 中的引用路径中排除文件?
【发布时间】:2010-10-01 13:28:10
【问题描述】:

在一个项目中,我们有多个源路径,因此我们为它们定义了一个引用路径:

<path id="de.his.path.srcpath">
    <pathelement path="${de.his.dir.src.qis.java}"/>
    <pathelement path="${de.his.dir.src.h1.java}"/>
    ...
</path>

标记中使用引用可以正常工作:

<src refid="de.his.path.srcpath" />

下一步,我们要把非java文件复制到classpath文件夹:

<copy todir="${de.his.dir.bin.classes}" overwrite="true">
    <fileset refid="de.his.path.srcpath">
       <exclude name="**/*.java" />
    </fileset>
</copy>

不幸的是,这不起作用,因为“refid”和嵌套元素可能不会混合。

有没有一种方法可以在我的源路径中获取一组所有非 java 文件,而无需将源路径列表复制到单个文件集中?

【问题讨论】:

    标签: ant


    【解决方案1】:

    这是一个选项。首先,使用pathconvert 任务制作适合生成文件集的模式:

    <pathconvert pathsep="/**/*,"
                 refid="de.his.path.srcpath"
                 property="my_fileset_pattern">
        <filtermapper>
            <replacestring from="${basedir}/" to="" />
        </filtermapper>
    </pathconvert>
    

    接下来从路径中的所有文件创建文件集,java 源除外。请注意,路径转换所需的尾随通配符 /**/* 仅用于列表中的通配符,而不是末尾需要的通配符:

    <fileset dir="." id="my_fileset" includes="${my_fileset_pattern}/**/*" >
         <exclude name="**/*.java" />
    </fileset>
    

    那么你的复制任务是:

    <copy todir="${de.his.dir.bin.classes}" overwrite="true" >
        <fileset refid="my_fileset" />
    </copy>
    

    为了可移植性,您可以考虑使用以下代码,而不是对 unix 通配符 /**/* 进行硬编码:

    <property name="wildcard" value="${file.separator}**${file.separator}*" />
    

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多