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