Ant:具有动态根目录

时间:2016-08-30 15:00:28

标签: ant

所以ant文件集,如果我希望它是由各种目标通过其ID引用的单独任务,我需要声明该文件集中的根“dir”属性。即:

<fileset id="my.fileset" dir="myDir">
    <includes name="**/*" />
</fileset>

在我的情况下,我有一组具有相同相对路径的文件,但根据不同的构建配置,它们将具有不同的根目录。即:

${dyanmic.root.dir}/com/name/package/file.class

我正在尝试使用文件的相对路径的文件集,但每次我引用文件集时,我都可以设置不同的“dir”属性来更改根目录。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

也许你可以使用multirootfileset(在Ant 1.9.4中引入) 只需将所有rootdir提供给basedirs属性。
所有这些dirs将共享嵌套包含,排除..

答案 1 :(得分:0)

您可以使用antcall并将根目录作为参数传递给包含fileset的目标。

<?xml version = "1.0"?>
<project name="project" default="main">


    <target name="callee">
        <echo message="Called... ${FOO}"/>

        <fileset id="my.fileset" dir="${FOO}" includes="**/*" />
        <property name="files" refid="my.fileset"/>
        <echo message="Files: ${files}" />

    </target>

    <target name="caller">
        <echo message="Calling...${FOO}"/>

        <antcall target="callee" inheritall="false">
            <param name="foo" value="${FOO}"/>
        </antcall>
    </target>

    <target name="main" depends="caller" />

</project>

然后,用-DFOO=value运行它以传递参数。例如,如果您的项目结构是这样:

.
├── 1
│   ├── a
│   └── b
├── 2
│   ├── c
│   └── d
└── build.xml

然后ant -DFOO=1将导致:

caller:
     [echo] Calling...1

callee:
     [echo] Called... 1
     [echo] Files: a;b

main:

BUILD SUCCESSFUL

ant -DFOO=2将导致:

caller:
     [echo] Calling...2

callee:
     [echo] Called... 2
     [echo] Files: c;d

main:

BUILD SUCCESSFUL