我在一家大公司工作,严格的政策禁止未经过滤的外部图书馆使用。我们必须从有福的公司存储库中提取所有内容,而不是包括gradle.org在内的裸网络。
使用gradle的原始apply plugin语法,结合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'
}
(我意识到私人仓库网址需要在某处定义)
新的插件语法总是发送到gradle.org,并且似乎没有任何方法可以提供备用下载URL。有谁知道一种方式?
我仔细检查了文档和互联网,但找不到答案。如果答案完全明显,请道歉。
非常感谢!
答案 0 :(得分:15)
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和常春藤 插件存储库必须另外包含插件标记工件 实际实现插件的工件。
repositories
中的pluginManagement
块与先前版本中的pluginRepositories
块的工作方式相同。
在Gradle 3.5之前,您必须在 settings.gradle 中define the pluginRepositories
block,如sytolk的回答中所述:
pluginRepositories {}块可能只出现在settings.gradle中 文件,并且必须是文件中的第一个块。
pluginRepositories { maven { url 'maven-repo' } gradlePluginPortal() ivy { url 'ivy-repo' } }
答案 1 :(得分: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中找到。
答案 2 :(得分:2)
要全局应用设置,可以如下设置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" }
}
}
}
答案 3 :(得分:1)
需要在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'
}
}