14

如何指定基本目录然后我们运行 ant 像ant -f somedir/dir/build.xml. Ant 设置 basedir 相对于 build.xml,如果我指定

<project basedir="." ..>

我想让 basedir 指向执行 Ant 的地方。

4

4 回答 4

20

使用 -D 覆盖 basedir 属性:

ant -Dbasedir=`pwd` -f path/to/build.xml

的使用pwd仅适用于 Linux,但如果您在另一个平台上,您始终可以将当前目录的绝对路径放在那里。

我认为没有办法在 build.xml 中执行此操作,除非使用ant任务重新执行 ant。

于 2013-04-01T16:08:14.407 回答
9

您可以尝试使用subant任务:

假设您有两个不同的文件夹

  1. 您正在执行ant命令的当前文件夹X:/your/launching/folder

  2. 目标 bulid.xml 所在的文件夹:Y:/any/folder/with/build.xml

您可以执行以下操作:

X:/your/launching/folder中使用以下内容创建build.xml :

<target name="mytarget">
    <subant target="debug">
        <fileset dir="Y:/any/folder/with" includes="build.xml"/>
    </subant>
</target>

然后您可以从X:/your/launching/folder文件夹执行ant mytarget以开始构建您的Y:/any/folder/with/build.xml

更新:

您可以像这样覆盖 subant 构建的basedir属性:

    <subant target="debug">
        <property name="basedir" value="./any/dir/with/project"/>
        <fileset dir="Y:/any/folder/with" includes="build.xml"/>
    </subant>
于 2013-04-30T08:28:20.930 回答
1

另一种解决方案(如果在某些情况下更有意义)可能是通过扩展中的任务覆盖basedirvar,如下所述: https ://stackoverflow.com/a/25786329/1915920antcontrib

于 2014-09-11T11:39:38.640 回答
0

我发现,使用以下解决方案是最简单的。

pushd somedir/dir && ant && popd

虽然这似乎很容易 - 它有效。

于 2019-07-22T07:37:41.920 回答