调用“ivy:retrieve”的问题在于,您还需要在ivy.xml(带有URL完整)中添加一个“artifact”标记以检索未在Maven中找到的依赖项程序存储库...
我不喜欢这样的原因有两个
- 的的ivy.xml应该只是声明你的依赖,而不是它们的位置。
- 需要在构建产生额外的定制逻辑。XML办理第三方包
理想的情况下应该是决定如何下载各种罐子你的仓库设置,这就是为什么我喜欢的打包解析器。即使我想要的图书馆不在Maven中,我也可以配置ivy来处理它。
以下是打开jreleaseinfo项目进入长春藤依赖的例子(在SourceForge上,我找不到它的Maven)
的ivy.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="ivy_packager"/>
<dependencies>
<dependency org="ch.oscg" name="jreleaseinfo" rev="1.3.0"/>
</dependencies>
</ivy-module>
申报两个解析器。默认是Maven2,另一个是打包程序配置为在本地查找指令。 (参见常春藤综述项目)
ivysettings.xml
<ivysettings>
<settings defaultResolver="maven2"/>
<resolvers>
<ibiblio name="maven2" m2compatible="true"/>
<packager name="repackage" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache">
<ivy pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
<artifact pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
</packager>
</resolvers>
<modules>
<module organisation="ch.oscg" name="jreleaseinfo" resolver="repackage"/>
</modules>
</ivysettings>
神奇的是包含在 “打包” 文件。在解析时,这将用于生成ANT脚本,该脚本既下载又提取所需的罐子。 (没有必要把这种逻辑到您的的build.xml)
库/ ch.oscg/jreleaseinfo/1.3.0/packager.xml
<packager-module version="1.0">
<property name="name" value="${ivy.packager.module}"/>
<property name="version" value="${ivy.packager.revision}"/>
<property name="zipname" value="${name}-${version}"/>
<resource dest="archive" url="http://sourceforge.net/projects/jreleaseinfo/files/jreleaseinfo/jreleaseinfo%201.3.0/jreleaseinfo-1.3.0.zip/download" sha1="9386d92758e627d04c2480b820731fd538b13a3f" type="zip"/>
<build>
<move file="archive/${zipname}/${zipname}.jar" tofile="artifacts/jars/${name}.jar"/>
</build>
</packager-module>
为了减少文件的数量我省略了模块的ivy.xml。这似乎是可选的,除非您想声明应该在公共存储库中存在的许可证和其他属性。
IvyRoundup是一个公开包装商回购。但包装工正是要走的路。 – SEK 2011-02-15 11:14:45