Ant构建脚本,antcall,依赖项等
时间:2020-03-05 18:39:10 来源:igfitidea点击:
我有一个构建脚本,作为该脚本的一部分,它将一个jar文件复制到一个目录中,为方便起见,我们将其称为utils jar。 utils jar由位于另一个目录中的另一个构建脚本构建。我想做的是让我的构建脚本运行utils构建脚本,以便确保utils jar是最新的。
所以我知道我需要导入utils构建文件。
<import file="../utils/build/build.xml" />
这是行不通的,因为与几乎其他所有蚂蚁taks不同,导入任务不是从basedir运行的,而是从pwd运行的。因此,为了解决这个问题,我准备了这个小东西,可以成功导入构建文件
<property name="baseDirUpOne" location=".." /> <import file="${baseDirUpOne}/utils/build/build.xml" />
因此,现在ive解决了我的导入问题,我需要调用该任务,这应该很容易就可以了:
<antcall target="utils.package" />
请注意,在上面,utils是../utils/build/build.xml的项目名称
我现在遇到的问题是ant调用没有在../utils/build中执行,所以我需要的却是runat属性或者类似的东西,本质上是:
<antcall target="utils.package" runat="../utils/build" />
我需要这个的原因是,在我的utils构建文件中,选择要复制到jar的代码的步骤是基于相对路径的,以避免在我的ant文件中对路径进行硬编码。有任何想法吗?
解决方案
回答
我已经进行了类似的设置:我有一个主要的Ant build.xml,它调用了一个单独的build.xml,用于构建测试。这是我的方法:
<target name="build-tests"> <subant target="build"> <fileset dir="${test.home}" includes="build.xml"/> </subant> </target>
诀窍是使用subant而不是antcall。我们不必导入其他构建文件。
回答
尝试使用" ant"任务而不是" antcall"任务,该任务直接运行导入的构建,而不是将其导入到当前构建文件中。它具有一个" dir"参数:
the directory to use as a basedir for the new Ant project. Defaults to the current project's basedir, unless inheritall has been set to false, in which case it doesn't have a default value. This will override the basedir setting of the called project.
因此,我们可以执行以下操作:
<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
或者类似的东西。
回答
我们可以使用antcall块中的嵌套将参数传递给antcall。因此,我们可以以这种方式传递属性(因为属性是不可变的,因此甚至可以基于基础)。