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

23

我知道可以使用与mavenLocal()相关联的maven插件在本地安装工件并使用它们。

然而,进一步调查后,我发现这意味着工件被安装到Maven的标准目录~/.m2下,但与此同时,Gradle自己的缓存位于不同格式的~/.gradle/caches下。

这对我来说似乎是浪费的,a)处理两个本地缓存,b)需要将mavenLocal()添加到所有项目中。我想知道是否有一种方法可以将工件发布到Gradle的~/.gradle/caches中?

2个回答

31
请注意,本地Maven仓库并不是一个(真正的)缓存,Gradle缓存也不是一个仓库。Gradle仅使用其缓存来缓存远程构件,它不应将从本地Maven仓库检索的构件复制到其中。反过来,您无法将构件发布到Gradle缓存中
因此,将构件发布到和使用`mavenLocal()`的方法应该不会像您想象的那样浪费资源。此外,您不必将`mavenLocal()`单独添加到多项目的所有项目中。您可以在根项目中简单地使用类似于`allprojects { repositories { mavenLocal() } }`的内容。或者,如果您想要在所有独立的Gradle项目中使用`mavenLocal()`,您甚至可以尝试将其添加到`~/.gradle/init.gradle`中。

这是一个内部构建插件,所以allprojects不起作用,因为我正在将mavenLocal()添加到buildscript中。但这确实回答了问题。 - Amir Abiri
但问题仍然存在。你如何推送(或至少使无效)Gradle的缓存? - mjaggard
根据您的具体用例,--refresh-dependencies 可能会达到您想要的效果。 - sschuberth
init.gradle(或Kotlin的init.gradle.kts) - mcoolive

2

这里有一个带有代码的示例。 由于无法发布到Gradle中,解决方法是发布到Maven并在Gradle中使用它。

步骤1:将代码发布到本地Maven存储库 /users/jay/.m2/repository/

步骤2:在另一个项目中使用本地Maven存储库中的代码。

步骤#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文件没有生成。你有什么想法? - xWAV92OdD445CbzcZAEyunk2M06fJi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接