我使用Ant 1.7,希望从不同的路径复制文件(它们没有关系,所以我不能使用include选择器将它们从根目录中过滤出来)。我尝试使用<copy>
内的<path>
而不是<fileset>
,因为使用<path>
,我可以指定<fileset>
中不可能的多路径。我的ant脚本看起来像这样,但是它不起作用。
<target name="copytest">
<!-- copy all files in test1 and test2 into test3 -->
<copy todir="E:/test3">
<path>
<pathelement path="C:/test1;D:/test2"></pathelement>
</path>
</copy>
</target>
有人知道如何在<copy>
中使用<path>
吗?或者有人有关于如何从不同的源没有选择器复制文件的建议?
顺便说一句,我不想硬编码源目录,它们将从属性文件中读取,所以在<copy>
中写入多个<fileset>
不应该被考虑。
提前感谢!
这只适用于flatten
属性设置为true
:
<copy todir="E:/test3" flatten="true">
<path>
<pathelement path="C:/test1;D:/test2"></pathelement>
</path>
</copy>
这在Ant Copy任务文档的Examples
部分中有记录。
<pathelement>
通常使用它的path
属性作为classpath
或其他预定义位置的引用,如果您想在类路径之外给出特定的文件位置尝试使用location
属性
<pathelement location="D:libhelper.jar"/>
location属性指定一个相对的文件或目录到项目的基目录(或绝对文件名),而属性接受以冒号或分号分隔的的位置。path属性用于预定义的路径——在任何情况下,都是带有location属性的多个元素
我们也有同样的问题
稍微复杂一点,我们需要为从路径
转换的每个文件集添加指定的模式集例如,这是传入数据
<path id="myDirList" path="C:/test1;D:/test2" />
<patternset id="myPatterns" includes="*.html, *.css, etc, " />
我们写了一个脚本来解决这个问题
<resources id="myFilesetGroup">
<!-- mulitiple filesets to be generated here
<fileset dir="... dir1, dir2 ...">
<patternset refid="myPatterns"/>
</fileset>
-->
</resources>
<script language="javascript"><![CDATA[
(function () {
var resources = project.getReference("myFilesetGroup");
var sourceDirs = project.getReference("myDirList").list();
var patterRef = new Packages.org.apache.tools.ant.types.Reference(project, "myPatterns");
for (var i = 0; i < sourceDirs.length; i++) {
var fileSet = project.createDataType("fileset");
fileSet.dir = new java.io.File(sourceDirs[i]);
fileSet.createPatternSet().refid = patterRef;
resources.add(fileSet);
}
})();
]]></script>
现在您可以在复制任务
中使用这些资源<!-- copy all files in test1 and test2 into test3 -->
<copy todir="E:/test3">
<resources refid="myFilesetGroup">
</copy>
I tried this and works fine
<fileset file="${jackson.jaxrs.lib}"/>