使用路径而不是文件集的Ant复制任务

使用路径而不是文件集的Ant复制任务,ant,path,copy,Ant,Path,Copy,我使用的是Ant 1.7,希望从不同的路径复制文件(它们没有关系,因此我无法使用include选择器将它们从根目录中筛选出来)。我尝试在中使用而不是,因为使用我可以指定中不可能的多路径。我的ant脚本看起来像这样,但不起作用 <target name="copytest"> <!-- copy all files in test1 and test2 into test3 --> <copy todir="E:/test3">

我使用的是Ant 1.7,希望从不同的路径复制文件(它们没有关系,因此我无法使用include选择器将它们从根目录中筛选出来)。我尝试在
中使用
而不是
,因为使用
我可以指定
中不可能的多路径。我的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>

有人知道如何在
中使用
吗?或者任何人都有关于如何在没有选择器的情况下从不同来源复制文件的建议

顺便说一句,我不想硬编码源目录,它们将从属性文件中读取,因此不应考虑在
中写入多个

提前谢谢

通常使用它的
路径
属性作为对
类路径
或某些其他预定义位置的引用,如果您想指定类路径之外的特定文件位置,请尝试使用
位置
属性

<pathelement location="D:\lib\helper.jar"/>

“位置”属性指定单个文件或相对目录 到项目的基本目录(或绝对文件名),而 path属性接受以冒号或分号分隔的 位置。“路径”属性用于预定义的路径 路径-在任何其他情况下,具有位置属性的多个元素 应优先考虑

我试过了,效果很好

我们也有同样的问题

更复杂的一点是,我们需要向从path转换的每个文件集添加指定的模式集

例如,这是传入的数据

<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>

仅当
展平
属性设置为
true
时,此选项才有效:

<copy todir="E:/test3" flatten="true">
    <path>
        <pathelement path="C:/test1;D:/test2"></pathelement>
    </path>
</copy>


这在的
示例部分中有记录。

感谢您的解释,但我仍然找不到解决方法。源目录由用户指定,应该在属性文件中写入。正如你所说,它与位置无关。我不希望用户更改build.xml并自行添加文件集。哦,我错过了这一部分,我以为您希望使用不相关的路径而不是文件集,因此我的答案是。要从属性文件中读取,需要将其提取为
propertyset
,并在
位置使用它。我没有一个工作示例这是否有效,复制任务从版本1.7.0开始允许path元素,但当我提供path refid时,它不会复制任何内容。
<copy todir="E:/test3" flatten="true">
    <path>
        <pathelement path="C:/test1;D:/test2"></pathelement>
    </path>
</copy>