ant获取当前文件的绝对目录

时间:2013-10-31 20:52:15

标签: java ant

我正在尝试设置一个antfile(位于目录A中的“antfile_A”)来调用另一个antfile(位于目录B中的“antfile_B”)。

我的问题是当我从antfile_A调用antfile_B时的所有文件操作似乎都与目录A相关。我可以将antfile_b中的路径硬编码为相对于目录A,但是我不能真正使用antfile_B本身。

我已经尝试在每个antfile的顶部设置basedir(到“。”),但是“。”当从antfile_A调用antfile_B时,似乎解析为目录A.

有没有办法直接获取antfile所在的绝对目录?在python中,它将类似于

os.path.abspath(os.path.dirname(__file__))

其他人如何解决这个问题? (或者你真的不应该从另一个调用一个antfile吗?)请告诉我。谢谢!

1 个答案:

答案 0 :(得分:4)

使用ant.file。此示例打印构建文件的绝对路径:

<project name="MyProject" default="abspath" basedir=".">
  <target name="abspath">
    <echo message="${ant.file}"/>
  </target>
</project>

如果您尝试使用ant(调试输出)标志运行-d,您将找到在调用第一个目标之前设置的属性,因此可在构建中使用文件。

当使用-d标志运行上述构建文件时,这取自输出:

...
Setting ro project property: ant.file -> /Users/abc/xyz/build.xml
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Setting ro project property: ant.file.type -> file
Setting ro project property: ant.project.name -> MyProject
Setting ro project property: ant.project.default-target -> abspath
Setting ro project property: ant.file.MyProject -> /Users/abc/xyz/build.xml
Setting ro project property: ant.file.type.MyProject -> file
...

为了完整性,您可以通过创建变量来获取包含构建脚本的目录的路径,如下所示:

<dirname property="my.project.dir" file="${ant.file}"/>