Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Ant build.xml中设置环境变量_Java_Ant - Fatal编程技术网

Java 如何在Ant build.xml中设置环境变量

Java 如何在Ant build.xml中设置环境变量,java,ant,Java,Ant,我想在build.xml目标中设置一个env变量 <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> 请建议。我尝试了很多方法,但都没有成功。此外,没有main()方

我想在build.xml目标中设置一个env变量

<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>

请建议。我尝试了很多方法,但都没有成功。此外,没有main()方法,因为框架基于testng,并且使用testng调用测试用例。

不变性:在ant中,属性是不可变的:

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

不行

易变性:但是变量是易变的,所以这是可行的:

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

修改代码:

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

是的,您可以这样做。将变量放入
build.properties
文件中,并在build.xml中引用它。然后你可以传递变量。。。但是我认为如果您需要更好地控制多个环境配置,那么使用会更好

构建属性 编译文件

你是如何运行你的程序的?如果它使用带fork的exec,那么您可以将新环境传递给它

页面中的示例

<exec executable="emacs">
  <env key="DISPLAY" value=":1.0"/>
</exec>
在没有任何命令行的情况下:

$ ant
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=mydefaultvalue
     [java] mydefaultvalue
$ ant -DSIMV3.1=commandlineenv
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=commandlineenv
     [java] commandlineenv
使用命令行中的一些参数:

$ ant
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=mydefaultvalue
     [java] mydefaultvalue
$ ant -DSIMV3.1=commandlineenv
Buildfile: C:\build.xml

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

你不能。为什么不使用System parameter?@SMA,因为环境变量会传播到子流程,这是我所需要的行为(将值传递给由Ant通过
JUnit
task启动的JUnit运行程序调用的回归测试的流程)。进程可以通过
setenv()
(系统调用)修改其环境,这就是shell修改传递给子进程的环境的方式。Ant应该暴露这个,但看起来可能没有。环境变量也适用于非Java进程。如果我尝试此操作,则会出现以下错误:问题:无法创建任务或类型变量原因:名称未定义。措施:检查拼写。操作:检查是否已声明任何自定义任务/类型。操作:检查是否发生了任何/声明。我正在使用ant-DSIMV3.1=true运行。在我的情况下,我有几个目标需要相同的变量,我不想在每个实例中显式地添加它(DRY)。
<?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>
public class EnvPrint {
    public static void main(String[] args) {
        System.out.println(System.getenv("SIMV3.1"));
    }
}
$ ant
Buildfile: C:\build.xml

myjava:
     [echo] Value of SIMV3.1=mydefaultvalue
     [java] mydefaultvalue
$ ant -DSIMV3.1=commandlineenv
Buildfile: C:\build.xml

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