代码之家  ›  专栏  ›  技术社区  ›  Hendrik Brummermann

如何从Ant中的引用路径中排除文件?

ant
  •  6
  • Hendrik Brummermann  · 技术社区  · 15 年前

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

    在<javac>标记中使用引用可以很好地工作:

    <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”和嵌套元素不能混合。

    1 回复  |  直到 15 年前
        1
  •  3
  •   martin clayton egrunin    15 年前

    这里有一个选择。首先,使用 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}*" />
    
    推荐文章