ant - 'make -n'等价于ant

标签 ant makefile

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

打印将要执行的命令,但不执行它们。

我正在寻找一个在Apache Ant中具有相同功能的选项。

最佳答案

太可怕了,可是在这里。我们可以使用<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

关于ant - 'make -n'等价于ant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9125225/

相关文章:

c - Makefile 说缺少运算符

java - 在intellij中的ant下的子进程中运行javac时,如何使错误消息可点击

java - ant 到 maven 迁移 maven - jar 构建

java - ant build - 不被识别为命令

java - 为什么 `gradle`在每个子项目中都执行 `ant.replaceregexp`?

c - 按降序对gcc makefile中的目标文件进行排序

makefile - .EXPORT_ALL_VARIABLES 仅在设为 'phony' 时才有效

java - Netbeans 中的 Ant : overriding run target doesn't work

makefile - 为什么不触发 .PHONY 隐式模式规则?

linux - 在 makefile 中检查 java 版本