【问题标题】:Ivy declare dependencies on all artifacts under a repository directoryIvy 声明对存储库目录下所有工件的依赖关系
【发布时间】:2013-03-05 08:24:18
【问题描述】:

这里对常春藤来说相对较新。

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

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

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

当然,上面的方法是行不通的。因此,欢迎任何指针/评论/指针建议。我不能成为第一个想要这样做的人,所以必须有办法做到这一点,也许我只是在搜索中没有使用正确的关键字。谢谢。

【问题讨论】:

    标签: java ant ivy


    【解决方案1】:

    发布一个额外的 ivy 文件,将所有其他项目列为依赖项列表。

    <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>
    

    针对这个特殊的 ivy 模块创建单个依赖项,然后将其他项目工件作为传递依赖项拉入。

    <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>
    

    配置是一个非常有用的 ivy 功能​​。客户端构建可以使用映射来拉入与 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 将生成并推送使用每个项目的最新版本解析的 ivy 文件。

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

    生成 ivy 文件

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

    以下是您可以使用的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>
    

    【讨论】:

    • 嗨,马克,感谢您的快速回复!我一直在寻找一种不需要我列出我需要的所有项目的解决方案。原因是:这是一个庞大的开发团队,而且我们的开发还很早,以至于我们不得不每隔几个月就建立新项目。我希望避免使用带有静态依赖列表的 ivy.xml,因为我不希望我们维护它。我希望这可以为我在这里尝试做的事情提供一些说明。
    • @YahyaCahyadi Ivy 的重点是获得有关项目依赖项的精确信息。你想做的事会破坏这一点。
    • @YahyaCahyadi 添加了生成常春藤文件的想法
    • 谢谢@GeoffReedy。我不会不同意你的观点,我的需求在这里很可疑。它可能不会进入最佳实践列表。但我认为这对我的用例有意义。
    • 感谢@MarkO'Connor!我有一个类似的想法,但认为我会保留它作为最后的手段。但是根据您到目前为止告诉我的内容,看起来 ivy 对我来说没有现成的解决方案(可能是因为,正如@GeoffReedy 所建议的,这不是 ivy 应该使用的方式)。所以我想我会使用动态常春藤文件生成。再次感谢大家的指点!
    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2013-05-25
    • 2011-09-09
    • 2013-01-31
    • 2014-11-04
    • 1970-01-01
    • 2011-08-16
    • 2016-04-18
    相关资源
    最近更新 更多