Как можно изменить репозиторий плагина 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.