对Ivy来说比较陌生。
我有一个不断增长的项目列表,它们都发布到同一组织下的同一存储库。并且,如果可能的话,我正在尝试找出如何声明从另一个项目到所有这些项目创建的工件的依赖关系。
My ivisettings.xml已经有一个指向该存储库位置的解析器。该仓库中的所有构件都来自同一组织。我试图确定是否有一种方法可以轻松地将工件包含在该位置,作为来自另一个项目的依赖项。我希望我可以使用通配符作为其名称,如:
<dependencies>
<dependency org="my.org.name" name="**" rev="${current.iteration}" conf="master" />
</dependencies>
当然,上面的方法是行不通的。因此,欢迎任何指针/评论/指针建议。我不可能是第一个想这么做的人,所以一定有办法做到这一点,也许我只是在搜索中没有使用正确的关键字。谢谢。
发布一个额外的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"/>
<标题>增强h1> 可以更进一步,创建不同的配置来对项目的工件进行分类:
<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特性。客户端构建可以使用映射来拉入与web应用程序或独立开发相关的工件。这个特性类似于Maven中的"作用域",但功能要强大得多。
更新:动态修订
当发布"projects"模块时,您可能希望使用动态修订来简化维护。
<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>
发布任务将生成并推送一个用每个项目的最新版本解析的ivy文件。
您仍然需要列出每个项目,但这实际上是一件好事。这意味着拉入旧版本的"projects"模块将在某个时间点产生相同数量的修订。
生成ivy文件
最后,为了完全自动化这个过程,使用可变数量的项目,也许您可以生成"projects"ivy文件?
下面是可以使用的groovy代码片段:
<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>
标题>