发布到gradle中的ivy存储库时,如何解决flatDir瞬态依赖关系



我有一个由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上。尽管如此,这个问题最终还是为我赢得了风滚草奖!

相关内容

最新更新