Ivy:将所有依赖项安装到共享存储库

时间:2013-02-15 14:44:45

标签: dependencies repository install shared ivy

正如标题所说,这是关于Ivy,我们主要用于Java项目的依赖性解析。我们刚刚建立了常春藤,所以我可能不知道一切。

这是我的问题:假设我有一个依赖于B,C,D,E等等的模块A.我知道我可以轻松地将模块A发布到我的共享仓库。这样可行。我想要的是,Ivy将模块A依赖的所有模块从其公共存储库复制到共享存储库。我已经检查了ivy:install任务,这不是我想要的(或者我可能误解它是如何工作的)。 example说:

<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/>

fromto属性是必需的,从示例中,我猜它适用于已知存储库中具有特定修订的一个依赖项。我必须编写一个ANT任务,明确地单独安装每个依赖项。

我需要的是告诉常春藤 - 执行解决 - 发布/安装所有找到的依赖项及其名称,修订版,从其源代码库中发现它已发布到我的共享存储库

因此to属性可能有意义,可能是conf属性,但不是namerevisionfrom

所以,我正在寻找像

这样的任务
<ivy:install to="shared"/>

将暂时安装所有依赖项(甚至排除依赖模块本身)到我的共享存储库,这样即使没有Internet连接或公共存储库关闭,我们也可以构建。

2 个答案:

答案 0 :(得分:3)

这不是最好的解决方案,但可能有用的是使用2个存储库。

使用第一个存储库发布模块A,然后使用ivy将A及其所有依赖项复制到第二个存储库。为此,您可以使用install任务。在from属性中,您将提供指向第一个存储库和公共存储库的chain resolver,以及您为共享存储库提供的to属性。

我没有在这样的设置中使用Ivy,但我们成功使用install将工件(包括所有传递依赖项)从公共存储库复制到我们自己的存储库,所以我不明白为什么这不应该工作

答案 1 :(得分:2)

这是基于Philipp的回答和我不可读的评论。我只想举几个例子。我总是在每个项目build-ivy.xml中都包含一个公共build.xml。此公共构建脚本包含以下任务,这些任务是安装模块所需的,包括对共享存储库的依赖性。

这将读取ivy.xml以填充变量。

<target name="init">
    <ivy:settings file="${env.IVY_SETTINGS}/ivysettings.xml"/>
    <ivy:info/>
</target>

下一个任务取决于你需要自己实现的清理,编译,打包等各种任务。

<target depends="init,clean-build,clean-dist,dist,package-doc,package-sources" name="publish-local">
    <ivy:resolve/>
    <ivy:publish status="release" resolver="local" overwrite="true" >
        <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

此任务现在将传递包含依赖项的当前模块传递到共享存储库。

<target name="install" depends="publish-local">
    <ivy:install module="${ivy.module}" from="local" to="shared" organisation="${ivy.organisation}" revision="${ivy.revision}" overwrite="true" transitive="true"/>
</target>