Gradle 将依赖项下载到缓存而不是 Maven 存储库

Posted

技术标签:

【中文标题】Gradle 将依赖项下载到缓存而不是 Maven 存储库【英文标题】:Gradle downloading dependency into cache instead of maven repository 【发布时间】:2015-03-01 09:26:09 【问题描述】:

我正在尝试在我的文件系统上为 maven 和 gradle 维护相同的存储库。但是我遇到了一些问题。

我的build.gradle 文件中有以下内容。

repositories 
    mavenLocal()
    mavenCentral()


dependencies 
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.9'
    runtime group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.9'
    runtime 'org.xerial:sqlite-jdbc:3.8.7'

GRADLE_HOME 是D:\Programming\Java\gradle-2.2.1 GRADLE_USER_HOME 是D:\Programming\Java\.m2

我的 gradle home 与我的 Maven 存储库相同。

但是当通过 gradle 下载依赖项时,它们将被下载到 GRADLE_USER_HOME\cache 而不是存储库文件夹中。我缺少什么配置?

编辑 我已经检查了Gradle In Action这本书的依赖管理章节。没有。我已经检查了 gradle 网站上的dependency management,但它也只是说使用了缓存。

似乎 gradle 中没有这样的选项。有人可以确认吗?

【问题讨论】:

【参考方案1】:

没有设置可以改变它。没有这样的 gradle 存储库。此外,由于混乱,让 gradle 使用存储库的文件夹作为依赖项缓存似乎是个坏主意。

如果您尝试将 gradle 构建的工件发布到上述 maven 存储库,您可能应该看看 maven-publish 插件。

如果您尝试在构建中使用该存储库中的工件,则可以将mavenLocal() 添加到您的存储库中,然后在您的依赖项中使用compile 函数。

【讨论】:

以上两件事我都知道。部分是如果我希望将工件放置在 maven 存储库中以便我可以在其他 gradle/maven 构建中重用?我目前的做法是首先通过 Maven 下载它,然后根据需要在 Maven/gradle 中使用它。 @AseemBansal 您想把它放在那里,这样当您执行使用相同(外部)工件的其他构建时就不必重新下载它?如果 gradle 在其缓存中已经有一个工件,它将尽可能地重用。 是的,这正是我想要的。但是 Maven 不会使用那个工件。我需要 maven,因为 IntellijIdea 中对 gradle is broken 的支持我无法在任何地方开始使用 gradle。同样出于某些奇怪的原因,gradle 正在下载依赖项,并且如果本地存储库中不存在依赖项,则不会从缓存中重用它们。 您可以编写一个自定义 gradle 任务来将缓存复制到 maven repo。至于 IDEA 的 gradle 集成被破坏,我只能说我不使用它。我更喜欢cli。 另外,gradle 根本不是为了弄乱 maven 的文件而构建的。并行使用多个构建系统总是很麻烦。【参考方案2】:

是的,我阅读了源代码并确认没有设置可以更改。

这是我的解决方案:

    安装本地 maven 存储库管理器,例如 Nexus。

    使用该存储库配置 gradle。

【讨论】:

以上是关于Gradle 将依赖项下载到缓存而不是 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章

阻止下载 Gradle 和 Maven 依赖项

如何使用 Gradle 中的本地 JUnit Jar 而不是 Maven Central?

Gradle离线如何缓存依赖项

如何更改 Gradle 下载位置

gradle 到 maven 的转换,在依赖项的依赖项的版本名称中解析通配符“+”?

有没有一种简单的方法可以从本地 gradle 缓存中删除一个依赖项?