您可以使用 ivy 的打包器解析器将任何可下载的包转换为 ivy 模块。
另见常春藤综合资料库
我的示例项目包含以下文件:
$ find . -type f
./build.xml
./ivy.xml
./ivysettings.xml
./repository/net.sourceforge/ooweb/0.8.0/packager.xml
常春藤.xml
声明对 ooweb 模块的依赖关系的普通 ivy 文件:
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="packager_demo"/>
<dependencies>
<dependency org="net.sourceforge" name="ooweb" rev="0.8.0"/>
</dependencies>
</ivy-module>
常春藤设置.xml
Maven 中央存储库被设置为默认存储库。特殊的“打包器”解析器用于检索ooweb模块。
工件模式指向包含有关如何下载模块工件的说明的打包程序文件。
<ivysettings>
<settings defaultResolver="central"/>
<resolvers>
<ibiblio name="central" m2compatible="true"/>
<packager name="packager" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache" preserveBuildDirectories="false">
<ivy pattern="file:///${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
<artifact pattern="file:///${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
</packager>
</resolvers>
<modules>
<module organisation="net.sourceforge" name="ooweb" resolver="packager"/>
</modules>
</ivysettings>
打包程序.xml
这里是魔法。资源声明给出了 tar 包的位置。build 部分包含 ANT 指令,说明哪些文件要移入模块的 artifacts 部分。
<packager-module version="1.0">
<property name="name" value="${ivy.packager.module}"/>
<property name="version" value="${ivy.packager.revision}"/>
<property name="packagename" value="${name}-${version}"/>
<resource dest="archive" url="http://sourceforge.net/projects/ooweb/files/ooweb/0.8.0/ooweb-0.8.0-bin.tar.gz/download" sha1="d886a3d48bf4380cbec3e6f7de029f01e5c55315" type="tar.gz"/>
<build>
<move file="archive/${packagename}/lib/${packagename}.jar" tofile="artifacts/jars/${name}.jar"/>
</build>
</packager-module>
注意:在后台,ivy 使用 XSLT 样式表从打包程序声明中生成 ANT 脚本。然后,此 ANT 脚本将下载工件并将其放入 ivy 缓存中。
更新
Gradle 嵌入了 ivy,因此这个打包器解决方案应该适用于两种构建技术。看到这个答案。