简体   繁体   中英

How to set an env variable in Ant build.xml

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.

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

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>

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM