如何更改 gradle 插件存储库?
Posted
技术标签:
【中文标题】如何更改 gradle 插件存储库?【英文标题】:How can the gradle plugin repository be changed? 【发布时间】:2016-09-14 02:26:54 【问题描述】:我在一家大公司工作,该公司有严格的政策,禁止未经过滤地使用外部库。我们必须从受祝福的公司存储库中提取所有内容,而不是从裸互联网(包括 gradle.org)中提取所有内容。
使用 gradle 的原始应用插件语法,结合 buildscript 块,我可以将(祝福)插件添加到我们的 repo 并在构建中使用它们。换句话说:
buildscript
repositories
maven url "https://privaterepo.myemployer.com"
dependencies
// various dependencies
classpath "org.something:some-plugin:1.0"
...
apply plugin: "someplugin"
相反,我希望能够使用新的插件 DSL,即
plugins
id 'org.something.some-plugin' version '1.0'
(我意识到需要在某个地方定义私有 repo url)
新的插件语法总是转到 gradle.org 并且似乎没有任何方法可以提供备用下载 url。有人知道方法吗?
我仔细检查了文档和 Internet,但找不到答案。如果答案完全显而易见,我们深表歉意。
非常感谢!
【问题讨论】:
仅供参考,在 Gradle 2.14 中能够做到这一点,它的第一个候选版本应该在本周发布。 请注意。发布候选版本于今天上午发布。 gradle.org/release-candidate 如果它有解决这个问题? 【参考方案1】:Gradle 3.5 和(大概)更高版本
Gradle 3.5 有一个新的 (incubating) 功能,可以更好地控制插件依赖解析,using the pluginManagement
DSL:
插件解析规则允许你修改插件请求
plugins
块,例如更改请求的版本或明确 指定实现工件坐标。要添加解析规则,请使用
resolutionStrategy
pluginManagement
块:示例 27.6。插件解析策略。
settings.gradle pluginManagement resolutionStrategy eachPlugin if (requested.id.namespace == 'org.gradle.sample') useModule('org.gradle.sample:sample-plugins:1.0.0') repositories maven url 'maven-repo' gradlePluginPortal() ivy url 'ivy-repo'
这告诉 Gradle 使用指定的插件实现工件 而不是使用其从插件 ID 到的内置默认映射 Maven/Ivy 坐标。
pluginManagement
块只能出现在 settings.gradle 中 文件,并且必须是文件中的第一个块。自定义 Maven 和 Ivy 插件存储库还必须包含插件标记工件 到实际实现插件的工件。
pluginManagement
中的 repositories
块与以前版本中的 pluginRepositories
块的工作方式相同。
Gradle 3.5 之前
在 Gradle 3.5 之前,您必须在 settings.gradle 中 define the pluginRepositories
block,如 sytolk 的回答中所述:
pluginRepositories 块可能只出现在 settings.gradle 文件,并且必须是文件中的第一个块。
pluginRepositories maven url 'maven-repo' gradlePluginPortal() ivy url 'ivy-repo'
【讨论】:
有没有办法在 build.gradle 中做到这一点?【参考方案2】:自最新版本的 Gradle 以来,插件语法发生了一些变化,现在 Gradle 4.x 的正确语法是:
pluginManagement
repositories
maven
url 'maven-repo'
gradlePluginPortal()
ivy
url 'ivy-repo'
因此,例如,这个 settings.gradle 将使用您的内部 Nexus 镜像:
pluginManagement
repositories
maven
url 'https://internal.repo.corporate/repository/gradle-proxy/'
rootProject.name = 'My Project Name'
更多信息可以在the Gradle plugin documentation找到。
【讨论】:
【参考方案3】:要全局应用设置,可以是added to USER_HOME/.gradle/init.gradle,如下:
allprojects
repositories
mavenLocal()
maven url "https://artifactory.mycompany.com/artifactory/maven-repo"
settingsEvaluated settings ->
settings.pluginManagement
repositories
mavenLocal()
maven url "https://artifactory.mycompany.com/artifactory/maven-repo"
【讨论】:
flutter-plugin 失败,例如apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
仍然尝试下载gradle-3-2-1.jar
文件;但扩展该插件的flutter.gradle
文件,如buildscript repositories maven url uri(offlineRepoDir)
有效???
用户级别的配置应该用于 preferential 设置(作为一般规则,不仅仅是 Gradle)。像这样的关键配置应该与项目一起存储。【参考方案4】:
需要在设置Gradle中定义pluginRepositories
https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories
pluginRepositories 块只能出现在 settings.gradle 文件中,并且必须是文件中的第一个块。
pluginRepositories
maven
url 'maven-repo'
gradlePluginPortal()
ivy
url 'ivy-repo'
【讨论】:
以上是关于如何更改 gradle 插件存储库?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Gradle 不使用插件 pom.xml 中声明的 Maven 存储库?
Android 库 - 使用 Gradle 将多个变体发布到本地 Maven 存储库
Gradle eclipse 插件:在存储库容器上找不到参数 [] 的方法 jcenter()。有关详细信息,请参阅错误日志