如何从Ant脚本中设置路径环境变量

43

如何从ant脚本中设置路径环境变量

7个回答

67

这是用于 <exec> 任务吗?

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

<exec executable="${my.command}">
    <env key="foo" value="bar"/>
    <arg line="some value"/>
</exec>

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

<property environment="env"/>
<exec executable="${my.command}">
   <env key="PATH" value="${env.PATH}:${my.directory}"/>
</exec>

如果这是为了某个需要环境变量的自定义任务,但如果没有设置环境变量,则不允许您在任务中设置环境变量,您可以尝试在以下位置设置它:

<property environment="env"/>
<property name="env.foo" value="bar!bar"/>

这可能会将一个名为foo的环境变量设置为bar!bar!的值。我记得有关这个问题的一些信息,但无法使其工作。

另一件事是让一个ant脚本执行另一个脚本,并让第一个脚本设置环境变量的值。当我必须设置ANT_OPT时,我使用了这种方法。


第一个解决方案对我起作用。我正在运行 RHEL 5.4,并且必须在需要它的 ant exec 任务中设置我的 PYTHONPATH。 - Alessandro
3
在我的电脑上(Win7),它必须是env.Path而不是env.PATH。 - Nate Glenn
4
在Unix和Java(因此也适用于Ant),环境变量名区分大小写。PATHPathpath不同。在Windows中,环境变量名不区分大小写。因此,PathpathPATH都是相同的,但是在使用Ant时,它们表示三个不同的变量。在Unix中,它始终是PATH。在Windows中,我甚至不确定是否在每台机器上都是相同的。您可以使用<echoproperties/>任务查看系统如何处理环境变量。 - David W.
@DavidW。嘿,谢谢!我一直在寻找一个能够做到这个的命令。 - Nate Glenn
一个<java>任务怎么办?Java任务文档没有提到任何内容。这需要在跨平台上工作。我正在尝试设置一个名为GAZEBO_MASTER_URI的变量。 - Peter Mitrano
请注意,在 Windows 中连接路径时,需要使用分号 (;) 而不是双冒号 (:) -- 这是一个容易被忽略的小细节。 - MicroVirus

5
在Ant中,属性是不可变的,因此David提出的建议如下:
<property name="env.foo" value="bar!bar"/>

这将不能起作用。

但是(使用antcontrib库)变量是可变的,因此以下代码可以工作:

<var name="env.foo" value="bar!bar"/>

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

这样做能完成任务,但似乎有些不正当的手段。

回答您具体的问题,可以尝试以下方法:

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

3
这是一个简洁的回答,但请注意变量“task”不是标准Ant发行版的一部分;您需要安装ant-contrib。 - gareth_bowles
1
此外,这实际上不会更新Windows环境变量,只会更新Ant属性env.PATH。 - Clintm

2
你可以使用setx命令来设置环境变量。
有关setx命令的帮助,请参考http://ss64.com/nt/setx.html
<exec executable="setx.exe">
  <arg line="Path C:\jdk1.5.0_12\bin"/>
  <arg line="/m"/>
</exec>

1
从setx文档中得知:“2)在本地系统上,由此工具创建或修改的变量将在未来的命令窗口中可用,但不会在当前的CMD.exe命令窗口中可用。”因此,除非用户想要打开一个新的shell,否则这不会成为问题的解决方案。 - Jerry

1
你可以使用 cd 命令扩展路径:
然后,你可以执行例如 sh 命令从 ant 中导出环境变量:
<property environment="env"/>
<exec executable="sh">
   <arg value="-c"/>
   <arg value="export PATH=${env.Path}:${myPath}"/>
</exec>

或者执行您的命令并设置env参数为value,像这样:

<property environment="env"/>
<exec executable="${your.command}">
   <env key="PATH" value="${env.PATH}:${your.directory}"/>
</exec>

1

我发现它是通过引用变量的值来工作的

<exec executable="setx">
    <arg line="Path &quot;${env.Path};c:\testPath&quot;" />
    <arg line="/m" />
</exec>

0

如果要通过Ant设置环境变量,请尝试调用exec任务并设置命令行值。顺便说一下,我还没有尝试过这个方法,但应该可以。


0

由于我声望不够,在<variable ...建议上无法发表评论,所以我的评论作为答案... :-/

在(“新的”)ant-contrib(额外的ANT包)中,任务不是称为<variable ...而是<var ...

(但对我来说它仍然没有起作用,因为我认为对<property environment="env" ... />任务创建的env.*(Java属性/变量)进行操作只与评估这些Java属性的任务/进程相关,这些属性并不会自动“同步回”操作系统环境变量)


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