Gradle:是不是可以发布到 Gradle 自己的本地缓存?

Posted

技术标签:

【中文标题】Gradle:是不是可以发布到 Gradle 自己的本地缓存?【英文标题】:Gradle: is it possible to publish to Gradle's own local cache?Gradle:是否可以发布到 Gradle 自己的本地缓存? 【发布时间】:2016-02-17 15:13:24 【问题描述】:

我知道我可以使用maven 插件加上mavenLocal() 来安装一个工件并在本地使用它。

但是进一步调查,我注意到这意味着工件安装到 Mavens 的标准 ~/.m2,但同时 Gradle 自己的缓存以不同的格式存在于 ~/.gradle/caches 下。

这对我来说似乎很浪费,a) 使用两个本地缓存,b) 必须将 mavenLocal() 添加到所有项目中。我想知道是否有办法将工件发布到 Gradle 的 ~/.gradle/caches

【问题讨论】:

【参考方案1】:

请注意,本地 Maven 存储库(实际上)不是缓存,Gradle 缓存也不是存储库。 Gradle 仅使用它的缓存来缓存远程工件,它不应该复制从那里的本地 Maven 存储库检索到的工件。反过来,you cannot publish artifacts to the Gradle cache。

所以发布和使用mavenLocal() 的方法不应该像你想象的那样浪费。此外,您不必将mavenLocal() 单独添加到多项目的所有项目中。您可以在根项目中简单地使用 allprojects repositories mavenLocal() 之类的东西。或者,如果您希望在所有您的独立 Gradle 项目中使用 mavenLocal(),您甚至可以尝试将其添加到 ~/.gradle/init.gradle

【讨论】:

这是一个内部构建插件,所以allprojects 将不起作用,因为我将mavenLocal() 添加到buildscript。但这确实回答了这个问题。 但问题依然存在。你如何推送到(或至少使)Gradle 的缓存无效? 根据您的具体用例,--refresh-dependencies 可能会做您想做的事。 init.gradle(或 Kotlin 的 init.gradle.kts)【参考方案2】:

这是一个带有代码的示例。 因为不可能发布到 Gradle 中。解决方法是发布到 maven 中并在 Gradle 中使用。

第1步将代码发布到本地maven仓库/users/jay/.m2/repository/

Step2 - 在另一个项目中使用本地 maven repo 代码。

第 1 步(发布到本地 maven 仓库)

apply plugin: 'maven-publish'

publishing 
    publications 
        mavenJava(MavenPublication) 
            from components.java
        
    

第 2 步(在您的 gradle 项目中使用本地 maven 存储库)

repositories 

    // ..... Other repositories

    mavenLocal()



dependencies 
    compile 'com.jai:myapp:1.0.0'

【讨论】:

由于某种原因生成了 -plain、sources、javadoc 但不是实际的 jar 文件。知道我会错过什么吗?

以上是关于Gradle:是不是可以发布到 Gradle 自己的本地缓存?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle:是不是可以在 gradle 插件中定义 CustomTask 并从 build.gradle 中扩展该类?

gradle 是不是可以使用优先级高于 jcenter 的 maven 存储库

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

Gradle从入门到了解 - 简书

Gradle 引入本地定制 jar 包

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