【问题标题】:Find working directory from Ant从 Ant 中查找工作目录
【发布时间】:2009-10-20 18:01:54
【问题描述】:

是否可以判断用户从哪个目录运行 Ant?

例如,我可能只想运行当前工作目录中的单元测试,而不是整个项目的所有测试。

我试过这个:

<property environment="env" />
<echo>${env.CWD}</echo>

但这不起作用。

【问题讨论】:

  • CWD 不是典型的 Windows 环境变量集的一部分。你是怎么设置的? @Asaph 提供的答案更加直截了当。

标签: java ant


【解决方案1】:

System.getProperties() 返回的整个 Properties 对象被 Ant 公开。试试这个:

<echo>${user.dir}</echo>

【讨论】:

    【解决方案2】:

    ${basedir} 也可能有用。

    在 Linux 下的 Netbeans 中,${user.dir} 似乎总是等于 ${user.home},但 ${basedir} 给了我运行 ant 的实际目录(所以它给了我项目目录)。

    【讨论】:

    • 默认情况下,basedir 是构建文件的父目录。这不一定与工作目录相同。
    • 这实际上正是我的问题。当我从另一个目录中的不同 ant 脚本调用我的 ant 脚本时,我无法弄清楚如何让我的工作目录成为其他目录。我看到 user.dir 是调用 ant 脚本的目录,而 basedir 是我要从中执行我的 ant 脚本的目录。我使用 &lt;ant target="default" inheritAll="true" dir="${otherDirectory}"/&gt; 调用我的 ant 脚本,但这只会更改 basedir 而不是当前工作目录。
    • 当/如果您使用 -f somebuildfileinsomeotherpath 标志执行 Ant 时,${basedir} 解析为包含构建文件的目录。所以这不是一个很好的标志,用于从您调用 ant 的位置获取当前目录。
    【解决方案3】:

    除非您使用的是 Windows,否则这将为您提供当前工作目录:

    <exec executable="sh" outputproperty="my.cwd"><arg line="-c pwd"/></exec>
    

    【讨论】:

    • 该命令有效,但它不符合 Ant 精神“一次编写,到处构建”,因为它不能在 Windows 下运行。
    【解决方案4】:

    在windows下

    <exec executable="cmd" outputproperty="my.cwd"><arg line="/C echo %cd%"/></exec>
    

    另见Using ant to detect os and set property

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多