Dav*_* W. 65

这是一项<exec>任务吗?

您可以在运行<exec>任务时设置环境变量:

<exec executable="${my.command}">
    <env key="foo" value="bar"/>
    <arg line="some value"/>
</exec>
Run Code Online (Sandbox Code Playgroud)

您可以使用<property environment="env"/>扩展路径:

<property environment="env"/>
<exec executable="${my.command}">
   <env key="PATH" value="${env.PATH}:${my.directory}"/>
</exec>
Run Code Online (Sandbox Code Playgroud)

如果这是针对某些需要环境变量的自定义任务,但是如果未设置环境变量,则不允许您在任务中设置环境变量,您可以尝试将其设置为:

<property environment="env"/>
<property name="env.foo" value="bar!bar"/>
Run Code Online (Sandbox Code Playgroud)

可能会设置一个名为foovalue的环境变量bar!bar!.我记得有关于此的一些事情,但无法让它发挥作用.

您可以做的另一件事是让一个ant脚本执行另一个,并让第一个ant脚本设置环境值.当我必须设置时,我这样做了ANT_OPT.

  • 在我的机器(Win7)上,它必须是env.Path,而不是env.PATH. (3认同)
  • @NateGlenn在Unix和Java中(因此也在Ant中),环境变量名称区分大小写.`PATH`与`Path`和`path`不同.在Windows中,环境变量名称不区分大小写.因此,`Path`,`path`和`PATH`都是相同的,但是当你使用Ant时,它们代表三个不同的变量.在Unix中,它总是`PATH`.在Windows中,我甚至不确定它是否在机器之间相同.您可以使用`<echoproperties />`任务来查看系统对环境变量的作用. (3认同)

Jer*_*rry 6

在蚂蚁中,属性是不可改变的,所以David的建议如上:

<property name="env.foo" value="bar!bar"/>
Run Code Online (Sandbox Code Playgroud)

不行.

但是(使用antcontrib-library)变量是可变的,所以这有效:

<var name="env.foo" value="bar!bar"/>
Run Code Online (Sandbox Code Playgroud)

注意:要使用antcontrib-library,请从此处下载:ANT Contrib - 下载

这完成了工作,但似乎是一个卑鄙的把戏.

所以对于您的具体问题,请尝试:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar" />
    </classpath>
</taskdef>

<var name="env.PATH" value="some:custom:value"/>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个简洁的答案,但请注意,变量任务不是标准Ant分发的一部分; 你必须安装ant-contrib. (3认同)

Vic*_*cky 0

要通过 Ant 设置环境变量,请尝试调用 exec task 并设置命令行值。顺便说一句,我还没有尝试过,但它应该有效。