Gradle плагин с пользовательским идентификатором группы - PullRequest
4 голосов
/ 03 февраля 2020

Gradle 6.1

У меня возникают трудности при использовании нового режима конфигурации плагинов в Gradle с пользовательским плагином из пользовательского репозитория.

buildscript {
    repositories {
        maven {
            url = uri("https://custom")
        }
        mavenCentral()
        jcenter()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }
}

plugins {
    java
    idea
    id("com.custom.gradle.plugin.myplugin") version "1.1.0"
}

Я получаю эту ошибку:

Plugin [id: 'com.custom.gradle.plugin.myplugin', version: '1.1.0'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'com.custom.gradle.plugin.myplugin:com.custom.gradle.plugin.myplugin:1.1.0')
  Searched in the following repositories:
    Gradle Central Plugin Repository

Gradle будет использовать идентификатор плагина в качестве идентификатора своей группы.

Это работает, если я использую старые способы:

buildscript {
    repositories {
        maven {
            url = uri("https://custom")
        }
        mavenCentral()
        jcenter()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }
    dependencies {
        classpath("com.custom:com.custom.gradle.plugin.myplugin:1.1.0")
    }
}

apply(plugin = "com.custom.gradle.plugin.myplugin")

Есть ли способ указать группу id с помощью команды 'id'? Или я нарушаю договор определения плагина с этим старым плагином?

1 Ответ

2 голосов
/ 03 февраля 2020

Чтобы использовать более новый / предпочтительный plugins { } DSL, пользовательский плагин должен опубликовать sh a артефакт маркера плагина .

Если пользовательский Плагин может быть изменен, тогда я предлагаю обновить, чтобы использовать Java Плагин Gradle Plugin Development , который создаст маркер для вас.

Если плагин не может обновиться, тогда вы все еще можете использовать блок plugins { }, но вам нужно будет вручную разрешить плагин:

В основном build.gradle:

plugins {
    id("com.custom.gradle.plugin.myplugin") version "1.1.0"
}

Затем разрешите подключаемый модуль вручную в settings.gradle:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "com.custom.gradle.plugin.myplugin") {
                useModule("com.custom:com.custom.gradle.plugin.myplugin:${requested.version}")
            }
        }
    }
}

Подробнее см. Правила разрешения подключаемого модуля .

...