首页 > 解决方案 > 在不破坏东西的情况下将项目添加到 ant 的 PATH

问题描述

ant,我怎样才能在PATH不破坏东西的情况下添加/usr/bin?我直接从 Apache ant 文档中工作,以将其应用到PATH https://ant.apache.org/manual/Tasks/exec.html(示例部分)。

文档引用searchpath的描述如下:

searchpath: 当该属性为true时,解析可执行文件的位置时会搜索系统路径环境变量。自蚂蚁 1.6.3

...但searchpath似乎也无助于解决这个特定问题。

举个例子build.xml

<project name="Sample" default="init" basedir=".">
  <description>Testing PATH with exec</description>
  <target name="init">
    <exec executable="./test.sh">
      <env key="PATH" value="${env.PATH}:/foo"/>
    </exec>
  </target>
</project>

以及以下 shell 脚本test.sh

#!/bin/bash
echo "Hello!"  # This works
uname          # If PATH is edited, shows "uname: command not found"

输出:

init:
     [exec] Hello!
     [exec] ./test.sh: line 3: uname: command not found
     [exec] Result: 127

...但是,如果我注释掉它,<env key="PATH" value="${env.PATH}:/foo"/>它工作正常。你如何添加PATH而不破坏东西?

我正在 MacOS 10.14.5“Mojave”上使用 AdoptOpenJDK 11.0.3 和 Apache Ant 1.10.6 进行测试。

标签: javalinuxmacosunixant

解决方案


找到了.. Apache Ant 文档假定您在代码中的某处调用了以下内容:

<property environment="env"/>

没有这个,PATH将设置为文字 string ${env.PATH},从而破坏该PATH值。这可以通过$PATH在 shell 脚本中回显 的值来观察。

他们的文档在示例中有此内容,但在上面的示例中遗漏了导致问题的内容。

<project name="Sample" default="init" basedir=".">
  <description>Testing PATH with exec</description>
  <target name="init">
  <property environment="env"/><!-- THIS WAS MISSING -->
    <exec executable="./test.sh">
      <env key="PATH" value="${env.PATH}:/foo"/>
    </exec>
  </target>
</project>

推荐阅读