Apache Ant有“严格模式”吗?

时间:2012-12-03 16:51:07

标签: ant properties strict

如果我有这样的Ant任务:

<target name="default">
  <mkdir dir="${installer.config.installation.db.path}"/>
</target>

引用的属性未设置,我最终得到一个目录(在此'mkdir'示例中)使用文字名称(作为'basedir'的子目录)创建:

${installer.config.installation.db.path}

如果要求ANT解析属性但是失败,有没有办法强制执行失败?

2 个答案:

答案 0 :(得分:1)

没有办法为所有属性执行此操作,但您可以检查单个属性:

 <fail unless="installer.config.installation.db.path" />

以上将在未定义属性时中止脚本。但是当属性为空时它会成功!

答案 1 :(得分:0)

以下内容仅适用于ant项目级属性。 (需要groovy lib)

<?xml version="1.0" encoding="UTF-8"?>
<project name="strict me" default="default" basedir=".">
    <target name="init-strict">
        <script language="groovy">
            import org.apache.tools.ant.PropertyHelper;
            def antProject = project;
            if( "#MyPropertyHelper"!=PropertyHelper.getPropertyHelper(antProject).toString() ) {
                def myPropertyHelper = new PropertyHelper(){
                    @Delegate PropertyHelper delegate = PropertyHelper.getPropertyHelper(antProject);
                    public Object getProperty(String name){
                        Object v = delegate.getProperty(name);
                        if(v==null)throw new org.apache.tools.ant.BuildException("The property `$name` not defined");
                        return v;
                    }
                    public String toString() {return "#MyPropertyHelper"}
                }
                antProject.addReference("ant.PropertyHelper", myPropertyHelper);
            }
        </script>
    </target>
    <target name="default" depends="init-strict">
        <mkdir dir="${installer.config.installation.db.path}"/>
    </target>
</project>