首页 文章

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

提问于
浏览
1

我有一个由gradle构建的项目,它将工件发布到本地ivy存储库 . 从历史上看,我们使用gradle纯粹使用flatDir存储库,因为我们希望将所有内容保存在本地 . 但是,我开始看到使用常 Spring 藤而不是到处复制生成的工件的好处 .

我可以轻松地将工件发布到ivy,但是使用存储库拉动此工件的其他项目在其瞬态flatDir依赖项上失败 .

我正在尝试找出处理这些瞬态依赖的最佳方法 . 很明显,任何使用工件的人都需要它们,因为它们具有工件使用的类 . 我应该将我的工件的瞬态依赖项发布到常 Spring 藤吗?最好的方法是什么?

我尝试过(我认为是hack)将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”)而失败,但在依赖项部分中没有组定义,因此常 Spring 藤中的条目也是如此 . xml没有组织值,即

<dependency org="" name="antlr" rev="3.4" conf="compile->default"/>

我想我错过了什么,如何混合flatDir和常 Spring 藤,我们将不胜感激 .

我应该将flatDir依赖项迁移到常 Spring 藤,以便它们正确解析,然后我可以更改我的构建以仅使用它作为源发布的常 Spring 藤存储库吗?我真的不能想到一个更好的方法,但如果我这样做,那将会产生相当大的影响,因为每个依赖都必须从主项目dir的lib目录转移到常 Spring 藤,而我只是真的想要使用常 Spring 藤存储库来管理我们生成的工件,而不是第三方库 .

1 回答

  • 1

    为了完整性,我无法找到一个合适的解决方案,最终在this article的帮助下将所有的lib / jars移动到常 Spring 藤 . 不过,这个问题最终让我获得了风滚草奖!

相关问题