Ivy声明对存储库目录下的所有工件的依赖

时间:2013-03-04 19:21:46

标签: java ant ivy

这里常春藤相对较新。

我有越来越多的项目列表,这些项目都发布到同一组织下的同一个存储库中。我试图找出如果可能的话,我可以将其他项目的依赖关系声明为由所有这些项目创建的工件。

我的 ivisettings.xml 已经有一个指向该存储库位置的解析器。该仓库中的所有工件都来自同一个组织。我试图确定是否有一种方法可以轻松地将该位置中的工件包含为来自另一个项目的依赖项。我希望我可以使用通配符来表达它的名字,例如:

    <dependencies>
            <dependency org="my.org.name" name="**" rev="${current.iteration}" conf="master" />
    </dependencies>

但当然上述方法不起作用。因此,任何指针/注释/指针建议都会受到欢迎。我不能成为第一个想要这样做的人,所以必须有办法做到这一点,也许我只是在我的搜索中没有使用正确的关键字。感谢。

1 个答案:

答案 0 :(得分:1)

发布一个额外的常春藤文件,列出所有其他项目作为依赖项列表。

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects" revision="1.0.0" status="release" publication="20130215110241"/>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="1.0.0"/>
        <dependency org="my.org.name" name="projectB" rev="1.0.0"/>
        <dependency org="my.org.name" name="projectC" rev="1.0.0"/>
        ..
        ..
    </dependencies>

</ivy-module>

为这个特殊的常春藤模块创建一个依赖项,然后将其他项目工件作为传递依赖项。

<dependency org="my.org.name" name="projects" rev="1.0.0"/>

增强

您可以进一步创建不同的配置来对项目的工件进行分类:

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects" revision="1.0.0" status="release" publication="20130215110241"/>

    <configurations>
        <conf name="web-apps" description="Projects which provide functionality for webapps"/>
        <conf name="standalone" description="Projects which provide functionality for stand-alone java apps"/>
    </configurations>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="1.0.0" conf="webapps->default"/>
        <dependency org="my.org.name" name="projectB" rev="1.0.0" conf="standalone->default"/>
        <dependency org="my.org.name" name="projectC" rev="1.0.0" conf="webapps->default;standalone->default"/>
    </dependencies>

</ivy-module>

配置是非常有用的常春藤功能。客户端构建可以使用映射来提取与webapp或独立开发相关联的工件。此功能类似于Maven中的“范围”,但功能更强大。

更新:动态修订

发布“项目”模块时,您可能希望使用dynamic revisions来简化维护。

<ivy-module version="2.0">
    <info organisation="my.org.name" module="projects"/>

    <dependencies>
        <dependency org="my.org.name" name="projectA" rev="latest.release"/>
        <dependency org="my.org.name" name="projectB" rev="latest.release"/>
        <dependency org="my.org.name" name="projectC" rev="latest.release"/>
        ..
        ..
    </dependencies>

</ivy-module>

publish task将生成并推送使用每个项目的最新版本解析的常春藤文件。

您仍然需要列出每个项目,但这实际上是一件好事。这意味着拉入旧版本的“项目”模块将在某个时间点产生相同数量的修订。

生成常春藤文件

最后要使用可变数字项目完全自动化这个过程,也许你可以生成“项目”常春藤文件?

以下是您可以使用的groovy snippet

<groovy>
    import groovy.xml.MarkupBuilder

    new File("build/ivy.xml").withWriter { writer ->
        def xml = new MarkupBuilder(writer)
        xml."ivy-module"(version:"2.0") {
            info(organisation:"my.org.name", module:"projects")
            dependencies() {
                new File("/path/to/projects/directory").listFiles().each { dir ->
                    dependency(org:"my.org.name", name:dir.name, rev:"latest.release")
                }
            }
        }
    }
</groovy>