0

目前我正在使用 shell 脚本来执行以下操作:

cd myproject1/
ant
cd ..
if grep 'sucessful' myproject/buil.log then move myproject ../backup/today/

对于 myproject2、myproject3,依此类推。

如果发生一些错误,项目将保留在当前目录中以进行重新处理,但整个过程仍在继续。

我想将此过程迁移到 ant 构建脚本,但我不知道如何执行此操作。

我看过 ant 和 subant 任务。Ant 看起来更适合这项工作,但我找不到使用 ant 循环目录列表并将任务移动到一起的方法,检查 ant 任务是否完成。

谢谢你。

4

2 回答 2

2

签出这个答案:

在不同目录中的不同 ant 脚本中运行特定目标

我建议您的子模块构建应该引发错误,而不是尝试复制日志解析逻辑。

更新

如果这是为了支持部署而设计的,也许您应该考虑一个 groovy 脚本?会更好地支持异常条件:

def ant = new AntBuilder()

scanner = ant.fileScanner {
    fileset(dir:".", includes:"test*/build.xml")
}

scanner.each { f ->
    try {
        ant.ant(antfile:f)
    }
    catch (e) {
        ant.mkdir(dir:"backup")
        ant.move(todir:"backup", file:f.parent) 
    }
}

Groovy 具有出色的 ANT 集成,也可以嵌入到您的 ANT 构建中:

<target name="run">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

    <fileset id="buildFiles" dir="." includes="test*/build.xml"/>

    <groovy>
        project.references.buildFiles.each { 
            def f = new File(it.toString())
            try {
                ant.ant(antfile:f)
            }
            catch(e) {
                ant.mkdir(dir:"backup")
                ant.move(todir:"backup", file:f.parent) 
            }
        }
    </groovy>
</target>
于 2012-05-08T23:01:41.600 回答
0

这些方面的东西可能是您正在寻找的东西:

<target name="compile" >

    <javac srcdir="${src.dir}" destdir="${class.dir}" />

</target >

<target name="copy" depends="compile" >

    <mkdir dir="${dest.dir}" />

    <copy todir="${dest.dir}" overwrite="true">

        <fileset dir="${class.dir}" includes="**" />

        <fileset dir="${src.dir}" includes="**" />

        ...

   </copy>

</target>
于 2012-05-08T23:09:13.797 回答