2

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

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

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

from和属性是强制性的to,从示例中,我猜它适用于已知存储库中的一个依赖项并具有特定修订版。而且我必须编写一个 ANT 任务,明确地分别安装每个依赖项。

我需要的是告诉 Ivy - Perform Resolve - 发布/安装所有找到的依赖项及其名称,从发现它的源存储库到我的共享存储库的修订

所以这个to属性可能有意义,可能是一个conf属性但不是name,revisionfrom

所以,我正在寻找一个像

<ivy:install to="shared"/>

这会将所有依赖项(甚至不包括依赖模块本身)暂时安装到我的共享存储库中,因此即使没有互联网连接或公共存储库关闭,我们也可以构建。

4

2 回答 2

3

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

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

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

于 2013-02-15T17:39:22.147 回答
2

这是基于菲利普的回答和我难以理解的评论。我只是想举一些例子。我总是有一个共同点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>
于 2013-02-18T17:43:46.380 回答