在一个项目中,我们有几个源路径,因此我们为它们定义了一个参考路径:
<path id="de.his.path.srcpath">
<pathelement path="${de.his.dir.src.qis.java}"/>
<pathelement path="${de.his.dir.src.h1.java}"/>
...
</path>
使用引用在&lt; javac&gt;中正常工作标记:
<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文件,而不将源路径列表复制到单个文件集中?
答案 0 :(得分:3)
这是一个选项。首先,使用pathconvert任务制作适合生成文件集的模式:
<pathconvert pathsep="/**/*,"
refid="de.his.path.srcpath"
property="my_fileset_pattern">
<filtermapper>
<replacestring from="${basedir}/" to="" />
</filtermapper>
</pathconvert>
接下来从路径中的所有文件创建文件集,但java源除外。请注意,pathconvert所需的尾随通配符/**/*
仅执行列表中的通配符,而不是最后需要的通配符:
<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}*" />