Задача Ant Copy с путем вместо FileSet - PullRequest
2 голосов
/ 08 августа 2011

Я использую Ant 1.7, хочу скопировать файлы по разным путям (они не имеют отношения, поэтому я не могу использовать селектор include для фильтрации их из корневого каталога). Я пытаюсь использовать <path> внутри <copy> вместо <fileset>, потому что с <path> я могу указать несколько путей, что в <fileset> невозможно. Мой сценарий муравья выглядит так, но он не работает.

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

Кто-нибудь имеет представление о том, как использовать <path> внутри <copy>? Или, может быть, у кого-нибудь есть совет, как копировать файлы из другого источника без селектора?

Кстати, я не хочу жестко кодировать исходные каталоги, они будут прочитаны из соответствующего файла, поэтому не следует рассматривать написание multi <fileset> внутри <copy>.

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 03 января 2017

Это работает, только если атрибут flatten установлен на true:

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

Это описано в разделе Examples документации по задаче Ant Copy .

0 голосов
/ 01 февраля 2013
I tried this and works fine

<fileset file="${jackson.jaxrs.lib}"/>
0 голосов
/ 13 декабря 2013

У нас та же проблема

Немного сложнее, что нам нужно добавить определенный набор шаблонов в каждый набор файлов, преобразованный из пути

Например, это входящие данные

<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>
0 голосов
/ 08 августа 2011

<pathelement> обычно использует его атрибут path в качестве ссылки на classpath или другое предопределенное расположение, если вы хотите указать определенные местоположения файлов вне classpath , попробуйте с атрибутом location

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

Атрибут location указывает отдельный файл или каталог относительно базового каталога проекта (или абсолютного имени файла), а атрибут path принимает списки местоположений, разделенные двоеточиями или точками с запятой.Атрибут пути предназначен для использования с предопределенными путями - в любом другом случае предпочтительнее использовать несколько элементов с атрибутами местоположения.

...