在项目之间共享Ant目标是否有完善的方法?我目前有一个解决方案,但它有点不雅。这是我到目前为止所做的。如何最好地在项目之间共享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的依赖管理提供这些任务,我仍然会遇到问题,因为到了解决依赖关系时,我必须在我的build.xml中的目标中,并且无法导入(due到上面提到的限制)。
有没有更好的解决方案,我想完成什么?
我有同样的困难。我只是做了很多复制和粘贴:)。 – 2014-05-06 20:52:21