我正在尝试设置一个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吗?)请告诉我。谢谢!
答案 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}"/>