How to set an env variable in Ant build.xml

2019-05-26 05:33发布

问题:

I want to set an env variable inside my build.xml target

<target name="run-tenantManagement" depends="jar">
   <property name="SIMV3.1" value="${SIMV3.1}" />
    //now here i want to do something like setenv SIMV3.1 true
</target>

and Inside my java code, I want to access it using :

if("true".equals(System.getenv("SIMV3.1")){
//do something
}

Kindly suggest. I have tried many things but none of them worked.Also, there is no main() method as the framework is testng based and test cases are invoked using testNG.

回答1:

How are you running your program? If it is using exec with fork, then you can pass new environment to it

https://ant.apache.org/manual/Tasks/exec.html.

Example from the page..

<exec executable="emacs">
  <env key="DISPLAY" value=":1.0"/>
</exec>

Consider following build.xml file

<?xml version="1.0"?>
<project name="MyProject" default="myjava" basedir=".">
  <target name="myjava">
    <!--default , if nothing comes from command line -->
    <property name="SIMV3.1" value="mydefaultvalue"/>

    <echo message="Value of SIMV3.1=${SIMV3.1}"/>
    <java fork="true" classname="EnvPrint">
      <env key="SIMV3.1" value="${SIMV3.1}"/>
    </java>
  </target>
</project>

and small java program

public class EnvPrint {
    public static void main(String[] args) {
        System.out.println(System.getenv("SIMV3.1"));
    }
}

With out any command line:

$ ant
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=mydefaultvalue
     [java] mydefaultvalue

With some arguments from command line:

$ ant -DSIMV3.1=commandlineenv
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=commandlineenv
     [java] commandlineenv


回答2:

Immutability: In ant, properties are immutable:

<property name="env.foo" value="your value goes here"/>

won't work.

Mutability: But variables are mutable, so this works:

<variable name="env.foo" value="your value goes here"/>

Modified Code :

<target name="run-tenantManagement" depends="jar">
    <variable name="env.SIMV3.1" value="${SIMV3.1}"/>
</target>


回答3:

Yes you can do this. Place your variable in a build.properties file and reference it in your build.xml. Then you can pass the variable... But I think it would be much better to use Maven Profiles if you need to have better control over multiple environment configurations.

build.properties

var=${val};

build.xml


 <property file="build.properties"/>     
 <property name="var" value="${val}"/>
   <target name="init">
      <echo>${var}</echo>
  </target>

CLI


 ant -Dvar=value


标签: java ant