在Ant脚本中检查环境变量是否已设置

14

如何在执行 Ant 脚本的其余部分之前检查是否已设置环境变量?

假设我的 Ant 脚本需要设置环境变量 "FOO"。下面这段代码可以正常工作,但我想知道是否有更简单的方法来实现同样的结果:

<property environment="env"/>
<property name="env.FOO" value=""/>

<target name="my-target">
    <condition property="foo.found">
        <not>
            <equals arg1="${env.FOO}" arg2=""/>
        </not>
    </condition>
    <fail unless="foo.found" message="FOO not set."/>
    <!-- do stuff here that uses the FOO environment variable -->
</target>
6个回答

26

这难道不是很简单吗:

<property environment="env"/>
<fail unless="env.FOO" message="FOO not set."/>

是的,你说得对!我才刚注意到我把${env.FOO}传递给了unless属性!(也就是我加了美元符号和花括号)。实际上,我遇到这个问题的原因是我试图将名为“bar”的属性设置为${env.FOO},然后在unless部分使用属性“bar”。如果我想保留“bar”属性,不确定该怎么做。 - digiarnie

8
除了David提到的方法,你还可以使用以下方法(补充):

使用

<isset property="env.Foo"/> instead of <equals />

这在Ant 1.9.2中不起作用。即使FOO未设置,此目标也不会失败:<target name="paul"> <fail message="FOO未设置。"> <condition> <isset property="env.FOO"/> </condition> </fail> </target>` - Paul

1

关闭:

<fail message="FOO not set.">
    <condition>
        <isset property="env.FOO"/>
    </condition>
</fail>

如果$FOO被设置为null,这段代码不会失败。


0

你可以通过在<fail>标签内嵌套一个<condition>来缩短它的长度。

<property environment="env"/>
<fail message="FOO not set.">
    <condition>
        <isset property="${env.FOO}"/>
    </condition>
</fail>

0

<property name="test.home.0" value="${env.TEST_HOME}"/>
<condition property="test.home" value="TO_BE_REPLACED">
  <equals arg1="${test.home.0}" arg2="\${env.TEST_HOME}"/>
</condition>
<property name="test.home" value="${env.TEST_HOME}"/>

<target name="test">
  <echo>TEST_HOME: ${test.home}</echo>
</target>

-1

这是我想出来的方法,使用isset属性来检查仅在Unix上存在的环境变量。 set.properties是启动此过程的第一个目标。

<property environment="env" />        

<target name="init" depends="set.properties" />

    <!--  Do init stuff....  -->
    </target>

    <!-- Other target stuff.....  -->

<!--
        Target: set.properties
--> 
<target name="set.properties"       
 description="Initializes Build Script, checks displays properties"
     depends="cond.hostname.exist,cond.hostname.not.exist">
</target>

<!--
        Target: check.cond HostName is Present
-->     
<target name="cond.check">
    <condition property="cond-is-true">
            <isset property="env.HOSTNAME"/>
    </condition>
</target>   

<!--
        Target: cond.hostname.exist
-->         
<target name="cond.hostname.exist" depends="cond.check" if="cond-is-true">
    <property name="targetboxname"  value="${env.HOSTNAME}" />
</target>   

<!--
        Target: cond.hostname.not.exist
-->             
<target name="cond.hostname.not.exist" depends="cond.check" unless="cond-is-true">
    <property name="targetboxname"  value="${env.COMPUTERNAME}" />
</target>   

    <!-- Then later on....  -->
    <echo>ComputerName/HostName:  ${targetboxname}  </echo>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接