'make -n'相当于蚂蚁

时间:2012-02-03 07:38:03

标签: ant makefile

根据make的手册页,-n选项执行以下工作:

Print the commands that would be executed, but do not execute them.

我正在寻找一个在Apache Ant中行为相同的选项。

5 个答案:

答案 0 :(得分:2)

可怕,但现在是。我们可以使用<script>标记内的一些代码在运行时破解目标。下面do-dry-run中的代码会在每个目标上设置unless属性,然后设置该属性,使其不会执行任何属性。 Ant仍会打印出由于unless属性而未执行的目标的名称。

*(使用Oracle,OpenJDK和IBM版本的Java,Ant 1.8+似乎支持JavaScript脚本标记。)

<?xml version="1.0" encoding="UTF-8"?>
<project default="build">

    <target name="targetA"/>
    <target name="targetB" depends="targetA">
        <echo message="DON'T RUN ME"/>
    </target>
    <target name="targetC" depends="targetB"/>

    <target name="build" depends="targetB"/>

    <target name="dry-run">
        <do-dry-run target="build"/>
    </target>

    <macrodef name="do-dry-run">
        <attribute name="target"/>
        <sequential>
            <script language="javascript"><![CDATA[

                var targs = project.getTargets().elements();
                while( targs.hasMoreElements() ) {
                    var targ = targs.nextElement();
                    targ.setUnless( "DRY.RUN" );
                }
                project.setProperty( "DRY.RUN", "1" );
                project.executeTarget( "@{target}" );

            ]]></script>
        </sequential>
    </macrodef>

</project>

当我正常运行时,echo会发生:

$ ant
Buildfile: build.xml

targetA:

targetB:
     [echo] DON'T RUN ME

build:

BUILD SUCCESSFUL
Total time: 0 seconds

但是,当我跑干跑时,它不会:

$ ant dry-run
Buildfile: build.xml

dry-run:

targetA:

targetB:

build:

BUILD SUCCESSFUL
Total time: 0 seconds

答案 1 :(得分:1)

Ant没有像make或maven那样的干运行选项。但你可以在eclipse下的调试模式下逐步运行ant文件。

答案 2 :(得分:0)

不,我相信。 Ant中默认没有这种方法。你会在谷歌上发现许多令人不满意的尝试。但是我曾经搜过一次并且没有成功。

答案 3 :(得分:0)

这将是一个有用的功能,但不容易实现。

Make和ANT在架构上完全不同。 ANT不运行外部OS命令,相反,大多数ANT“任务”在同一Java线程中执行。

可以模仿“干跑”如下:

<project name="Dry run" default="step3">

    <target name="step1" unless="dry.run">
        <echo>1) hello world</echo>
    </target>

    <target name="step2" depends="step1" unless="dry.run">
        <echo>2) hello world</echo>
    </target>

    <target name="step3" depends="step2" unless="dry.run">
        <echo>3) hello world</echo>
    </target>

</project>

按如下方式运行ANT将打印目标名称,但不会执行附带的任务:

$ ant -Ddry.run=1

Buildfile: build.xml

step1:

step2:

step3:

BUILD SUCCESSFUL
Total time: 0 seconds

答案 4 :(得分:0)

在您的buildscript中创建一个特殊目标,仅执行一些回显,即检查属性,路径..是否正确解析。
如果回答了类似问题,请参阅https://stackoverflow.com/a/6724412/130683 要查看ant安装的详细信息,请使用ant -diagnostics