0

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

4

1 回答 1

6

使用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}"/>
于 2013-10-31T21:05:25.710 回答