在不破坏内容的情况下将项目添加到蚂蚁的路径

时间:2019-07-18 16:20:39

标签: java linux macos unix ant

ant中,如何添加到PATH而不破坏/usr/bin中的内容?我直接从Apache ant文档中进行工作,以应用于PATH https://ant.apache.org/manual/Tasks/exec.html(示例部分)。

文档引用了searchpath,其描述如下:

  

searchpath :当此属性为true时,在解析可执行文件的位置时将搜索系统路径环境变量。自Ant 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进行测试。

1 个答案:

答案 0 :(得分:0)

找到了它。Apache Ant文档假定您在代码中的某个位置调用了以下内容:

<property environment="env"/>

否则,PATH将被设置为文字字符串${env.PATH},从而破坏PATH的值。可以通过在shell脚本中回显$PATH的值来观察到这一点。

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

<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>