如何最好地在项目之间共享Ant目标?
在项目之间共享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到上面提到的限制)。
有没有更好的解决方案,我想完成什么?
如果您正在使用ANT 1.8+,那么你可以只导入的版本。xml直接从托管位置。
http://ant.apache.org/manual/Tasks/import.html
由于蚂蚁1.8.0任务也可以从网址 进口资源或 类路径的资源(这是网址, 真的)。如果您需要知道 当前构建文件的源代码是否有 是文件或URL,您可以参考 属性ant.file.type.projectname (使用与上述相同的示例 ant.file.type.builddocs)其中 的值为“file”或“url”。
<!-- importing.xml -->
<project name="importing" basedir="." default="...">
<import file="http://myserver/ivy/ivy-tasks.xml"/>
</project>
这适用于本地文件,但是当我尝试使用URL时,它仍会尝试解析相对于本地项目路径的URL。 – 2014-05-06 20:53:06
要避免URL相对于本地项目的路径被解析,请使用'
经过一些额外的搜索之后,可能的解决方案是使用SVN externals来检查build.xml可能需要的特定必需文件。
但是,这只适用于使用Subversion作为源代码管理的用户。对于没有使用Subversion或其他支持类似功能的SCM的用户,有一个SCM不可知的解决方案仍然很不错。
我们所做的是创建一个名为'bootstrap'的项目,其中包含我们办公室其他项目所需的各种xml文件。 因此,要设置您的开发环境,请在引导程序中运行build.xml,将xml文件(如ivy-stuff和其他目标文件)复制到已知位置,然后您的构建文件包含这些内容:
<import file="${ant.bootstrap.dir}/ant-commons.xml" />
<import file="${ant.bootstrap.dir}/ant-commons-ear.xml" />
我们引导build.xml文件包含此:
<target name="install">
<fail unless="ant.bootstrap.dir" message="ant.bootstrap.dir ${missing.property.message}"/>
<copy todir = "${ant.bootstrap.dir}">
<fileset dir = "src/xml"/>
</copy>
</target>
我有同样的困难。我只是做了很多复制和粘贴:)。 – 2014-05-06 20:52:21