Как можно изменить репозиторий плагина gradle?
Я работаю в большой компании со строгой политикой, запрещающей нефильтрованное использование внешних библиотек. Мы должны вытащить все из благословленных корпоративных репозиториев, а не голый интернет, включая gradle.org.
Используя gradle original применить синтаксис плагина в сочетании с блоком buildscript, я могу добавить (благословенные) плагины к нашему репо и использовать их в сборках. Другими словами:
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'
}
(я понимаю, что URL-адрес частного репо нужно будет где-то определять)
Новый синтаксис плагина всегда идет на gradle.org и, похоже, не имеет средств для предоставления альтернативного URL-адреса загрузки. Кто-нибудь знает способ?
Я внимательно изучил документацию и Интернет и не могу найти ответ. Извините, если ответ полностью очевиден.
Большое спасибо!
Ответы
Ответ 1
Gradle 3.5 и (предположительно) позже
Gradle 3.5 имеет новую (инкубационную) функцию, позволяющую более pluginManagement
контролировать разрешение зависимостей плагина с помощью pluginManagement
DSL:
Правила разрешения плагинов позволяют изменять запросы plugins {}
блоках 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 использовать указанный артефакт реализации плагина вместо его встроенного отображения по умолчанию из идентификатора плагина в координаты Maven/Ivy.
Блок pluginManagement {}
может появляться только в файле settings.gradle и должен быть первым блоком в файле. Пользовательские репозитории плагинов Maven и Ivy должны содержать артефакты маркеров плагинов в дополнение к артефактам, которые фактически реализуют плагин.
Блок repositories
внутри pluginManagement
работает так же, как и блок pluginRepositories
из предыдущих версий.
До Gradle 3.5
До Gradle 3.5 вы должны были определить блок pluginRepositories
в вашем файле settings.gradle, как объяснено в ответе sytolk:
Блок pluginRepositories {} может появляться только в файле settings.gradle и должен быть первым блоком в файле.
pluginRepositories {
maven {
url 'maven-repo'
}
gradlePluginPortal()
ivy {
url 'ivy-repo'
}
}
Ответ 2
Чтобы применить настройку глобально, ее можно добавить в 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
Необходимо определить плагиныRepositories в настройках Gradle
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'
}
}
Ответ 4
Синтаксис плагина немного изменился со времени последней версии 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'
Дополнительную информацию можно найти в документации к плагину Gradle.