【发布时间】:2010-12-22 04:36:08
【问题描述】:
是否有一种成熟的方法可以在项目之间共享Ant 目标?我目前有一个解决方案,但它有点不雅。这是我目前正在做的事情。
我有一个名为ivy-tasks.xml 的文件托管在我们网络上的服务器上。除其他目标外,该文件还包含用于使用 Ivy 管理项目依赖关系的样板任务。例如:
<project name="ant-ivy-tasks" default="init-ivy"
xmlns:ivy="antlib:org.apache.ivy.ant">
...
<target name="ivy-download" unless="skip.ivy.download">
<mkdir dir="${ivy.jar.dir}"/>
<echo message="Installing ivy..."/>
<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true"/>
</target>
<target name="ivy-init" depends="ivy-download"
description="-> Defines ivy tasks and loads global settings">
<path id="ivy.lib.path">
<fileset dir="${ivy.jar.dir}" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpathref="ivy.lib.path"/>
<ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
</target>
...
</project>
托管此文件的原因是因为我不想:
- 将文件签入到每个需要它的项目中 - 这会导致重复,从而使维护目标变得更加困难。
- 让我的 build.xml 依赖于从源代码管理中检出项目 - 这将使构建在顶层有更多 XML 来访问文件。
我在项目的 build.xmls 中使用此文件的方式如下:
<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>
<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>
关于此的“脏”部分是我必须在目标之外执行上述步骤,因为import task 必须位于顶层。另外,我仍然必须将这个 XML 包含在所有需要它的 build.xml 文件中(即仍有一些重复)。
除此之外,在其他情况下,我可能需要导入一些常见(非 Ivy)任务。如果我要使用 Ivy 的依赖项管理来提供这些任务,我仍然会遇到问题,因为当我解决依赖项时,我必须在 build.xml 中的目标内,并且无法导入(由于到上面提到的约束)。
对于我想要完成的事情有更好的解决方案吗?
【问题讨论】:
-
我也遇到了同样的困难。我只是做了很多复制和粘贴:)。
标签: ant build build-process ivy dependency-management