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 中扩展该类?