【发布时间】:2011-08-02 05:31:06
【问题描述】:
如何在ant脚本中设置路径环境变量
【问题讨论】:
如何在ant脚本中设置路径环境变量
【问题讨论】:
这是针对<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 脚本设置环境值。当我必须设置 ANT_OPT 时,我这样做了。
【讨论】:
PATH 不同于 Path 和 path。在 Windows 中,环境变量名称不区分大小写。因此,Path、path 和PATH 都是相同的,但是当您使用 Ant 时,它们代表三个不同的变量。在 Unix 中,它总是PATH。在 Windows 中,我什至不确定它在机器之间是否相同。您可以使用<echoproperties/> 任务来查看您的系统对环境变量做了什么。
在ant中,属性是不可变的,所以上面大卫的建议:
<property name="env.foo" value="bar!bar"/>
不会工作。
但是(使用 antcontrib-library)变量是可变的,所以这是可行的:
<var name="env.foo" value="bar!bar"/>
注意:要使用 antcontrib-library,请从此处下载: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"/>
【讨论】:
您可以使用 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>
【讨论】:
我发现它通过引用变量的值来工作
<exec executable="setx">
<arg line="Path "${env.Path};c:\testPath"" />
<arg line="/m" />
</exec>
【讨论】:
要通过 Ant 设置环境变量,请尝试调用 exec task 并设置命令行值。顺便说一下,我还没有尝试过,但它应该可以工作。
【讨论】:
因为我没有足够的声誉来评论 <variable ... 的建议,所以我的评论作为答案... :-/
在(“较新”)ant-contrib(额外的 ANT 包)中,该任务不称为<variable ...,而是称为<var ...!
(但无论如何它对我不起作用,因为我认为 env.* (由<property environment="env" ... /> 任务创建)Java 属性/变量 的操作是仅与评估这些 Java 属性的任务/进程相关,这些属性不会自动“同步回”到操作系统环境变量)
【讨论】:
你可以使用扩展路径:
然后你可以执行例如sh从ant到export的环境变量:
<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>
【讨论】: