我正在使用Ant和Ivy构建项目。 build.xml
文件取决于ant-contrib,bean scripting framework,beanshell和commons-logging。
Ant在多个地方搜索库,包括${user.home}/.ant/lib
。
build.xml
文件中是否有任何方法让这些库自动下载并安装在${user.home}/.ant/lib
目录中(如果它们尚不存在,可能使用Ivy本身?)
谢谢,拉尔夫
答案 0 :(得分:5)
你的ant lib中唯一需要的jar是常春藤: - )
在 ivy.xml 文件中正常声明您的依赖项。利用配置集中分组与ANT任务相关的jar:
<configurations>
<conf name="tasks" description="Ant tasks"/>
</configurations>
<dependencies>
<dependency org="ant-contrib" name="cpptasks" rev="1.0b5" conf="tasks->default"/>
<dependency org="junit" name="junit" rev="3.8" conf="tasks->default"/>
..
在 build.xml 文件中,您可以根据此配置创建路径
<ivy:resolve/>
<ivy:cachepath pathid="tasks.path" conf="tasks"/>
<taskdef name="task1" classname="??" classpathref="tasks.path"/>
<taskdef name="task2" classname="??" classpathref="tasks.path"/>
答案 1 :(得分:3)
当我正在阅读Ivy cachefileset documentation时,我发生了这个问题,其中指出:
请更喜欢使用retrieve + 制作标准的蚂蚁路径 你的构建更加独立于常春藤 (一旦工件正确 检索,常春藤不是必需的 更多)。
Ivy cachepath文档同样声明:
如果你想让你的构建更多 独立于常春藤,你可以 考虑使用检索任务。一旦 工件被正确检索, 您可以使用标准的Ant路径创建 这使得常春藤没有必要 更多。
因此,似乎更好的答案是修改Mark对使用检索和ant路径的东西的响应。以下内容:
<小时/> Mark的回应(已修改)
<configurations>
<conf name="tasks" description="Ant tasks"/>
</configurations>
<dependencies>
<dependency org="ant-contrib" name="cpptasks" rev="1.0b5"
conf="tasks->default"/>
<dependency org="junit" name="junit" rev="3.8" conf="tasks->default"/>
..
在 build.xml 文件中,您可以从此配置
创建路径<ivy:retrieve conf="tasks"
pattern="${dir.where.you.want.taskdef.jars}/[artifact]-[revision].[ext] />
<path id="tasks.path">
<fileset dir="${dir.where.you.want.taskdef.jars}">
<include name="**/*.jar"/>
</fileset>
</path>
<taskdef name="task1" classname="??" classpathref="tasks.path"/>
<taskdef name="task2" classname="??" classpathref="tasks.path"/>
这甚至允许您将检索任务移动到处理依赖项的单独ant文件中。因此,在将依赖项检索到其目录中之后,您不必依赖常春藤。
常春藤的意图是你用它来拉下你的罐子(解决和检索)。准备好后,可以切换回使用标准Ant。
<小时/> 注意:我只是将这些依赖项拉入lib目录。这将简化检索任务:
<ivy:retrieve conf="tasks" />
另请注意:访问'Path-like Structures' section of this page for more on "standard ant path creation"
答案 2 :(得分:2)
我会使用ant来安装INTO ant = D
中的所有内容只需使用depends =“init-ant-contrib,init-ivy”
<!-- ANT-CONTRIB Auto Installer -->
<available property="ant-contrib-exists"
file="${ant.library.dir}/ant-contrib-1.0b3.jar" />
<target name="download-ant-contrib" unless="ant-contrib-exists">
<mkdir dir="${ant.library.dir}" />
<get src="http://downloads.sourceforge.net/project/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3-bin.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fant-contrib%2Ffiles%2Fant-contrib%2F1.0b3%2F&use_mirror=cdnetworks-us-1"
dest="${ant.library.dir}/ant-contrib-1.0b3-bin.zip"
username="true" />
<unzip src="${ant.library.dir}/ant-contrib-1.0b3-bin.zip"
dest="${ant.library.dir}"
overwrite="no" />
<move todir="${ant.library.dir}">
<fileset file="${ant.library.dir}/ant-contrib/*.jar" />
<fileset file="${ant.library.dir}/ant-contrib/lib/*.jar" />
</move>
<delete file="${ant.library.dir}/ant-contrib-1.0b3-bin.zip" />
<delete dir="${ant.library.dir}/ant-contrib" />
</target>
<target name="init-ant-contrib" depends="download-ant-contrib">
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="${ant.library.dir}/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
</target>
<!-- IVY Auto Installer -->
<property name="ivy.install.version" value="2.1.0-rc2" />
<condition property="ivy.home" value="${env.IVY_HOME}">
<isset property="env.IVY_HOME" />
</condition>
<property name="ivy.home" value="${user.home}/.ant" />
<property name="ivy.jar.dir" value="${ivy.home}/lib" />
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
<available file="${ivy.jar.file}" property="ivy-exists" />
<target name="download-ivy" unless="ivy-exists">
<mkdir dir="${ivy.jar.dir}" />
<!-- download Ivy from web site so that it can be used even without any special installation -->
<get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}"
usetimestamp="true" />
</target>
<target name="init-ivy" depends="download-ivy">
<!-- try to load ivy here from ivy home, in case the user has not already dropped
it into ant's lib dir (note that the latter copy will always take precedence).
We will not fail as long as local lib dir exists (it may be empty) and
ivy is in at least one of ant's lib dir or the local lib dir. -->
<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" />
</target>
现在你有了ant-contrib&amp;常春藤,其他一切应该是一个简单的ivy.xml&amp;常春藤解决了:
<target name="resolve" depends="init-ivy">
<ivy:retrieve />
</target>
我相信你可以找到类似的方法来安装你可能需要的任何ant任务。