使用可用从蚂蚁获取文件的路径



>我正在使用 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路径。目前,根的路径被硬编码为一系列相对路径(../../../)。我们很快就会进行代码重组,我想通过"动态"查找来摆脱硬编码的相对路径。

我当前的解决方案是对 findroot 中设置属性的目标使用递归antcallback.xml该目标。我有一些逻辑来限制通过父目录的搜索,直到我达到根级别。它可以工作,但它会导致代码重复 wazoo - 每个构建.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] Searching /home/user/repos/proj/common/math
[available] Found: build.root in /home/user/repos/proj

我已经查看了可用的doxygen甚至可用的源代码,这似乎是不可能的。

我错过了什么吗?除了available之外,有没有其他方法可以让我获得这种期望的行为?

property任务具有"位置"属性,用于构建文件的规范路径。

<property name="project.dir" location="build.root" />

但请注意,即使文件不存在,也会设置此属性,因此如果这是一个问题,则必须执行更复杂的操作。我不确定您是否要失败构建或在找不到文件时寻找其他地方。

如果要失败,可以使用available作为条件:

<property name="project.dir" location="build.root" />
<fail message="build.root not found">
<condition>
<available file="${project.dir}" />
<condition>
</fail>

如果你只是想找到它,不管它在哪里,我会使用一个fileset

<fileset dir="${basedir}" includes="**/build.root" />

您可以使用resourcecount任务断言只找到一个文件(假设这是您想要的),并pathconvert是否确实需要将该文件设置为属性而不是路径引用。

为了记录在案,我建议尽可能避免使用ant-contrib。

相关内容

  • 没有找到相关文章

最新更新