【问题标题】:running specific target in different ant scripts in different directories在不同目录中的不同 ant 脚本中运行特定目标
【发布时间】:2012-02-03 17:24:44
【问题描述】:

我们有大量的应用程序。它们都有一个位于项目基目录中的build.xml 文件。我正在尝试创建一个 ant 脚本,该脚本将遍历并调用所有项目中每个 build.xml 文件的特定目标。

以下是问题:

  1. 有些项目的目录比其他项目更深。
  2. 一次只需要构建部分项目。

我试图使用 subant + antfile 并在属性文件中定义文件路径的 CSV,但这不起作用。以下是我所拥有的以及我得到的错误。

如果有更好的方法或者你知道我的问题是什么,请告诉我!谢谢!

这是在属性文件中定义的属性。我希望运行脚本的人在此处添加相对于他们正在运行的脚本的当前位置的文件路径。

projects.to.build=

这是我尝试在主构建脚本中使用的子任务。

    <filelist
        id="projectNames"
        dir="${basedir}"
        files="${projects.to.build}"
    />

    <target name="debugAll" description="Builds all the projects listed in the projectNames.properties file.">
        <subant target="debug" antfile="${projects.to.build}">
        </subant>
    </target>

这是我在属性文件中定义了项目时尝试运行构建脚本时遇到的错误。我正在使用相对路径。例如:..\Apps\AnApp1\build.xml,..\Apps\AnApp2\build.xml,..\OtherApps\foo\AnotherApp1\build.xml

"No Build Path Specified" (at my subant task)

【问题讨论】:

    标签: ant subant


    【解决方案1】:

    您指定了 antfile 属性,因此 ANT 期望单个 build.xml 文件。


    subant documentation 描述了如何将文件集用作子参数。

    这是一个例子:

    <project name="Subant demo" default="run-debug-target">
        <target name="run-debug-target">
            <subant target="debug">
                <fileset dir="." includes="**/build.xml" excludes="build.xml"/>
            </subant>
        </target>
    </project>
    

    更新

    也可以使用filelist

    <project name="Dry run" default="run">
        <target name="run">
            <subant target="test">
                <filelist dir="projects" files="one/build.xml,two/build.xml,three/build.xml,four/build.xml"/>
            </subant>
        </target>
    </project>
    

    处理以下构建文件:

    • projects/one/build.xml
    • projects/two/build.xml
    • projects/three/build.xml
    • projects/four/build.xml

    【讨论】:

    • 是的,但我希望能够通过读取属性文件中的属性集来指定要构建的项目。我希望这个属性是项目构建文件的相对路径的 CSV。我发现我可以做到这一点的唯一方法是使用filelist,而我在filelist 中找到的唯一示例是使用antfile。有没有办法通过fileset 实现我的目标?
    • @prolink007 我已按要求使用文件列表更新了我的帖子。您可以轻松地使用属性来保存 CSV 格式的文件名列表
    • 效果很好。谢谢您的帮助!我试图把事情复杂化。 =(
    【解决方案2】:

    是否可以同时运行所有构建文件中的目标?

    例如

    <project name="Dry run" default="run">
        <target name="run">
            <subant target="test">
                <filelist dir="projects" files="one/build.xml,two/build.xml,three/build.xml,four/build.xml"/>
            </subant>
        </target>
    </project>
    

    在这个例子中,有没有办法同时运行所有构建文件(一个/build.xml、两个/build.xml、三个/build.xml、四个/build.xml)中存在的目标“测试”?

    【讨论】:

    • 如果您将其作为问题提出,您将更有可能得到答复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多