我有一个由gradle构建的项目,它将工件发布到本地ivy存储库。从历史上看,我们纯粹将gradle与flatDir存储库一起使用,因为我们希望将所有内容都保持在本地。然而,我开始看到使用ivy而不是到处复制生成的工件的好处。
我可以很容易地将工件发布到ivy,但其他使用存储库拉入工件的项目在其瞬态flatDir依赖关系上失败了。
我正在努力找出处理这些暂时依赖关系的最佳方法。很明显,任何使用工件的人都需要它们,因为它们有工件使用的类。我应该将工件的瞬态依赖关系发布到ivy吗?最好的方法是什么?
我尝试过(我认为这是一种黑客攻击)用将flatLib目录中的jar声明为工件
group 'utils'
repositories {
flatDir {
dirs 'lib'
name 'librepo'
}
}
dependencies {
compile ":antlr:3.4"
// ...
}
artifacts {
project.repositories.librepo.dirs.each { dir ->
dir.eachFile {
if (it.isFile()) {
archives file(it)
}
}
}
}
但是,包含工件的项目会失败,因为flatDir文件被上传到与主工件相同的组(在本例中为"utils"),但在依赖项部分中没有组进行定义,因此ivy.xml中的条目没有组织值,即
<dependency org="" name="antlr" rev="3.4" conf="compile->default"/>
我想我错过了什么,如果能帮助我如何混合flatDir和ivy,我将不胜感激。
我是否应该将flatDir依赖项迁移到ivy,以便它们正确解析,然后我可以更改我的构建,只使用它发布到的ivy存储库作为源?我真的想不出更好的方法了,但如果我这样做,它会产生很大的影响,因为每个依赖项都必须从主项目目录的lib-dir移到ivy,我只想使用ivy存储库来管理我们生成的工件,而不是第三方库。
为了完整起见,我找不到一个合适的解决方案,最后在本文的帮助下,我也将所有的lib/jar移到了ivy上。尽管如此,这个问题最终还是为我赢得了风滚草奖!