如何从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_OPT
时,我使用了这种方法。
<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"/>
<exec executable="setx.exe">
<arg line="Path C:\jdk1.5.0_12\bin"/>
<arg line="/m"/>
</exec>
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>
我发现它是通过引用变量的值来工作的
<exec executable="setx">
<arg line="Path "${env.Path};c:\testPath"" />
<arg line="/m" />
</exec>
如果要通过Ant设置环境变量,请尝试调用exec任务并设置命令行值。顺便说一下,我还没有尝试过这个方法,但应该可以。
由于我声望不够,在<variable ...
建议上无法发表评论,所以我的评论作为答案... :-/
在(“新的”)ant-contrib(额外的ANT包)中,任务不是称为<variable ...
而是<var ...
!
(但对我来说它仍然没有起作用,因为我认为对<property environment="env" ... />
任务创建的env.*
(Java属性/变量)进行操作只与评估这些Java属性的任务/进程相关,这些属性并不会自动“同步回”操作系统环境变量)
PATH
与Path
和path
不同。在Windows中,环境变量名不区分大小写。因此,Path
、path
和PATH
都是相同的,但是在使用Ant时,它们表示三个不同的变量。在Unix中,它始终是PATH
。在Windows中,我甚至不确定是否在每台机器上都是相同的。您可以使用<echoproperties/>
任务查看系统如何处理环境变量。 - David W.