【问题标题】: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

【问题讨论】:

    标签: gradle


    【解决方案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 文件。知道我会错过什么吗?
    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多