1

我试图通过这个答案在 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的

4

2 回答 2

3

您可能需要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 定位命令的方式::CreateProcessant 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>
于 2012-07-04T21:24:57.103 回答
0

不幸的是,一个与 1.6.5 版本相关的 ant 错误。我能够更新到 1.8.4 并且一切正常。

于 2012-07-05T19:09:57.333 回答