开发者

Ant Copy task with Path instead of FileSet

开发者 https://www.devze.com 2023-03-26 08:32 出处:网络
I\'m using Ant 1.7, want to copy files from different paths (they have no relationship, so i cannot use the include selector to filter them out of their root directory). I try to use the <path>

I'm using Ant 1.7, want to copy files from different paths (they have no relationship, so i cannot use the include selector to filter them out of their root directory). I try to use the <path> inside the <copy> instead of <fileset>, because with <path> i can specify multi paths which is in <fileset> not possible. My ant script looks like this, but it doesn't work.

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

Anybody has idea about how to use the 开发者_Python百科<path> inside <copy>? Or maybe anybody has the advise about how to copy files from different source without selector?

Btw, i don't want to hard code the source directories, they will be read from a propertiy file, so writing multi <fileset> inside <copy> should not be considered.

thanks in advance!


This only works if the flatten attribute is set to true:

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

This is documented in the Examples section of the Ant Copy task documentation.


<pathelement> generally uses it's path attribute as a reference to classpath or some other predefined location, if you want to give specific file locations outside of the classpath try with location attribute

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

The location attribute specifies a single file or directory relative to the project's base directory (or an absolute filename), while the path attribute accepts colon- or semicolon-separated lists of locations. The path attribute is intended to be used with predefined paths - in any other case, multiple elements with location attributes should be preferred.


We have the same problem

A bit more complicated that we need to add a specified pattern set to each fileset converted from path

For example, this is the incoming data

<path id="myDirList" path="C:/test1;D:/test2" />
<patternset id="myPatterns" includes="*.html, *.css, etc, " />

We wrote a script to solve this problem

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

now you can use this resources in you copy task

<!-- 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}"/>
0

精彩评论

暂无评论...
验证码 换一张
取 消