使用Ant的exec任务设置环境变量似乎无效。

7

当我尝试使用Ant的exec任务来设置某个变量时,它似乎不能设置到我所需的值。不确定哪里出了问题。

当我在命令行中使用cmd设置并回显时,它完美地工作。

<exec executable="cmd">
    <arg value="set"/>
    <arg value="MY_VAR=SOME_VAL"/>
</exec>

<echo message="MY_VAR is set to %MY_VAR%"/>

输出结果如下:

exec
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\MY_PROJ_BASE_DIR_HERE>
echo
MY_VAR is set to **%MY_VAR%**

可能是 https://dev59.com/j2035IYBdhLWcg3wH8Ul 的重复问题。 - Sietse van der Molen
我尝试使用以下代码:<property environment="env"/> <exec executable="cmd"> <env key="MY_VAR" value="SOME_VAL"/> </exec> 但它也不起作用。 - user1587504
2个回答

5

使用/C选项来运行cmd.exe

build.xml

<project name="ant-exec-cmd-with-env-key" default="run">
    <target name="run">
        <exec executable="cmd" failonerror="true">
            <env key="MY_VAR" value="SOME_VAL"/>
            <arg value="/c"/>
            <arg value="echo %MY_VAR%"/>
        </exec>
    </target>
</project>

输出

run:
     [exec] SOME_VAL

已接受您的答案。小问题,如果我需要在exec之外访问%MY_VAR%,我需要再次使用property ant任务吗? - user1587504
复制到新属性不起作用!:(exec不支持嵌套的“property”元素。 - user1587504
1
正如我所发布的那样,MY_VAR仅存在于<exec>任务的生命周期内。如果您需要在任务完成后引用某种属性,请在调用<exec>之前设置一个属性,并将该引用传递给<exec><property name="my.var.local" value="SOME_VAL"/> <exec...><env key="MY_VAR" value="${my.var.local}"/>...</exec> - Chad Nouis

0

你确定问题不是出在你读取变量的过程中吗?

<property environment="env"/>
<property name="MY_VAR" value="${env.MY_VAR}"/>

我们不能在exec中使用property。'exec不支持嵌套的"property"元素。'我正在尝试在Windows上使用'set MY_VAR=SOME_VAL'来设置一些变量,并希望以类似的方式在*nix上使用export。 - user1587504

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接