【问题标题】:How do I resolve flatDir transient dependencies when publishing to an ivy repository in gradle?在 gradle 中发布到常春藤存储库时如何解决 flatDir 瞬态依赖关系?
【发布时间】:2012-08-20 05:35:53
【问题描述】:

我有一个由 gradle 构建的项目,该项目将工件发布到本地 ivy 存储库。从历史上看,我们纯粹将 gradle 与 flatDir 存储库一起使用,因为我们希望将所有内容都保留在本地。但是,我开始看到使用 ivy 比到处复制生成的工件的好处。

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

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

我已经尝试(我认为是 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”),但在依赖项部分中没有定义组,因此条目在 ivy.xml 中没有 org 值,即

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

我想我遗漏了一些东西,对于如何混合 flatDir 和 ivy 的任何帮助将不胜感激。

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

【问题讨论】:

    标签: gradle ivy


    【解决方案1】:

    为了完整起见,我找不到合适的解决方案,最终在this article 的帮助下也将所有 lib/jar 移动到了 ivy。尽管如此,这个问题最终还是为我赢得了风滚草奖!

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 2016-10-08
      • 2012-08-05
      • 2013-02-14
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多