【发布时间】:2017-06-10 02:19:54
【问题描述】:
我使用的是 Ant 1.10,如果文件存在,我需要从我当前的位置在目录结构中查找文件的路径。我们已经在我们的构建环境中使用了ant-contrib,所以使用它的建议没有问题。
例如,我的目录结构如下:
~/repos/proj/
--/build.root
--/common/math/
--/build.xml
--/ivy.xml
--/build/tools/
--/build-shared.xml
--/ivy-stuff.xml
--/products/
--/prodA/
--/build.xml
--/ivy.xml
我需要检索的路径是~/repos/proj 作为绝对路径(我将此属性称为buildrootdir)。然后我创建一个由buildrootdir 和build-shared.xml 的路径构成的属性。目前,根目录的路径被硬编码为一系列相对路径 (../../../)。我们将很快进行代码重组,我想通过“动态”查找摆脱硬编码的相对路径。
我当前的解决方案是使用递归 antcallback 到 findroot.xml 中设置属性的目标。我有一些逻辑来限制通过父目录的搜索,直到我到达根级别。它可以工作,但会导致代码重复出现在 wazoo 中——每个 build.xml 都会有一个相邻的 findroot.xml。否则,我有一个普通 findroot.xml 文件的硬编码相对路径,这违背了我的目标。我不想要这样的东西:
~/repos/proj/
--/build.root
--/common/math/
--/build.xml
--/ivy.xml
--/findroot.xml
--/build/tools/
--/build-shared.xml
--/ivy-stuff.xml
--/findroot.xml
--/products/
--/prodA/
--/build.xml
--/ivy.xml
--/findroot.xml
我正在查看available 任务并注意到我可以将“searchparents”标志设置为true,它会递归地向上搜索。我可以使用
<available property="found" file="build.root" filepath="${basedir}" searchparents="true"/>
这说明文件可用。但是,我不知道如何使用 available 来获取它的路径。我查看调试输出,我看到以下几行:
[available] Searching /home/user/repos/proj/common/math
[available] Found: build.root in /home/user/repos/proj
我查看了available doxygen 甚至available source code,但似乎不可能。
我错过了什么吗?是否有替代 available 的方法可以让我获得这种期望的行为?
【问题讨论】: