Объедините наборы файлов, используя Ant - PullRequest
22 голосов
/ 12 июля 2011

У меня есть 2 разных набора файлов, определенных в Ant следующим образом:

<fileset id="fileset1" dir="${classes.dir}">
</fileset>

<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class">
</zipfileset>

Я хочу создать третий набор файлов, который является объединением обоих вышеуказанных наборов файлов

<fileset id="merged">
</fileset>

Может кто-топодскажите как это сделать?Можно ли вообще сделать что-то подобное?Заранее спасибо!

Ответы [ 3 ]

18 голосов
/ 23 октября 2012

Один из способов сделать это - использовать Ant набор ресурсов , в частности union.

<fileset id="fileset1" dir="${classes.dir}" />
<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class" />

<union id="onion">
    <resources refid="fileset1" />
    <resources refid="fileset2" />
</union>

Тогда вы можете обращаться к «луку» везде, где вы можете использовать набор файлов, например,

<copy todir="dest">
    <resources refid="onion" />
</copy>

Я рекомендую использовать общие элементы resources вместо наборов файлов для максимальной гибкости.

2 голосов
/ 12 июля 2011

Попробуйте: я думаю, что это должно работать, поскольку <fileset> является неявным <patternset>.

<fileset id="fileset1" dir="${classes.dir}">
</fileset>

<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class">
</zipfileset>

РЕДАКТИРОВАТЬ: странно.Это возможно?

<patternset id="merged">
  <patternset refid="fileset1" />
  <patternset refid="fileset2" />
</patternset>
0 голосов
/ 18 апреля 2019

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

A <pathconvert> Задача может принимать наборы файлов через refid. Вы можете поместить несколько наборов файлов (например, из различных целей сборки для сборки составного набора в корневой / основной цели для модульной среды сборки):


<project name="root" basedir="." xmlns:if="ant:if" xmlns:unless="ant:unless">
<!-- 
it's important to take the xmlns:features in your project head 
otherwhise this code won't work 
-->
    <target name="init">
        <!-- set some common prerequisites -->
        <property name="prerequisite.property.xyz" value="xyz" />
    </target>

    <target name="targetA" depends="init">
        <fileset dir="${common.basedir}${file.separator}${targetA.subdir}" id="targetA.fileset">
            <include name="**/*.html" />
        </fileset>
        <property name="targetA.fileset.exists" value="true" />
    </target>

    <target name="targetB" depends="init">
        <fileset dir="${common.basedir}${file.separator}${targetB.subdir}" id="targetB.fileset">
            <include name="**/*.java" />
        </fileset>
        <property name="targetB.fileset.exists" value="true" />
    </target>

    <target name="targetC" depends="init">
        <fileset dir="${common.basedir}${file.separator}${targetC.subdir}" id="targetC.fileset">
            <include name="**/*.class" />
        </fileset>
        <property name="targetC.fileset.exists" value="true" />
    </target>

    <target name="root" depends="init">
        <pathconvert property="all.files.as.commaseparated.path" pathsep="," dirsep="/">
            <fileset refid="targetA.fileset" if:true="${targetA.fileset.exists}" />
            <fileset refid="targetB.fileset" if:true="${targetB.fileset.exists}" />
            <fileset refid="targetC.fileset" if:true="${targetC.fileset.exists}" />
            <map from="${common.basedir}/" to="" />
        </pathconvert>
        <!-- assemble new fileset from paths as comma separated property string -->
        <fileset id="new.refid" dir="${common.basedir}" includes="${all.files.as.commaseparated.path}" />
    </target>
</project>

Это можно вызвать из командной строки, например:

ant targetA targetB targetC root

или

ant targetA root

Помните, что root всегда является последней вызываемой целью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...