我试图通过这个答案在 ant build.xml 上设置 PATH 环境变量。
它适用于 cygwin,但不适用于 cmd 或 PowerShell。
一些信息:
Apache Ant 1.6.5(我知道有一个更新的版本(1.8.4),但出于内部原因我必须使用这个旧版本)
电源外壳 v2.0
cmd v6.1.7601
赛格温 2.774
Windows 7的
我试图通过这个答案在 ant build.xml 上设置 PATH 环境变量。
它适用于 cygwin,但不适用于 cmd 或 PowerShell。
一些信息:
Apache Ant 1.6.5(我知道有一个更新的版本(1.8.4),但出于内部原因我必须使用这个旧版本)
电源外壳 v2.0
cmd v6.1.7601
赛格温 2.774
Windows 7的
您可能需要exec
在 Windows/cmd 环境中稍微不同地使用该任务。
让我们以 windows 命令set
为例。set
将打印环境变量。exec
运行命令的正常任务set
可能如下所示:
<exec executable="set" outputproperty="set.output">
<env key="MY_VAR" value="MY_VAL"/>
<echo message="${set.output}"/>
</exec>
但是使用这种形式的exec
任务应该会抛出 IOException: The system cannont find the file specified。
在 windows cmd shell 下运行 ant 时,exec
也可以通过 调用任务cmd
,如下所示:
<exec executable="cmd" outputproperty="set.output">
<arg line="/c set"/>
<env key="MY_VAR" value="MY_VAL"/>
<echo message="${set.output}"/>
</exec>
这是等效的命令;实际执行的命令是cmd /c set
,它set
在 cmd 子进程中运行。
这是必要的原因只是有点复杂,并且是由于 Win32 定位命令的方式::CreateProcess
。ant exec 文档简要解释了这一点。
请注意,我没有使用 PowerShell 尝试过其中任何一个,所以我没有经验,如果有的话,会起作用。
在我自己的 ant 构建脚本中,我通常有两个版本的每个目标,需要对 Windows 平台进行特殊处理,isWindows
测试如下所示:
<target name="check-windows">
<condition property="isWindows">
<os family="windows"/>
</condition>
</target>
然后我可以使用以下命令在同一任务的版本之间切换:
<target name="my-target-notwindows" depends="check-windows" unless="isWindows>
...
</target>
<target name="my-target-windows" depends="check-windows" if="isWindows>
...
</target>
<target name="my-target" depends="my-target-notwindows,my-target-windows">
...
</target>
不幸的是,一个与 1.6.5 版本相关的 ant 错误。我能够更新到 1.8.4 并且一切正常。