Напишите плагин Gradle, который реагирует на несколько плагинов

#gradle #plugins #kotlin #build.gradle #gradle-plugin

#gradle #Плагины #kotlin #build.gradle #gradle-плагин

Вопрос:

Я пытаюсь написать новый плагин Gradle, который требует применения двух плагинов: либо java , либо java-library , либо maven-publish . Я пишу плагин на Kotlin.

Я могу легко, следуя руководству по Gradle, заставить плагин реагировать на одно приложение-плагин:

 project.plugins.withType(MavenPublishPlugin::class.java) {
    // My stuff
}
  

Но я не могу сделать то же самое для двух подключаемых приложений:

 project.plugins.withType(JavaPlugin::class.java) {
    project.plugins.withType(MavenPublishPlugin::class.java) {
        // My stuff
    }
}
  

Во втором случае запуск с:

Случай 1: как и ожидалось

 plugins {
    id("java")
    id("maven-publish")
    id("org.danilopianini.publish-on-central")
}
  

запускает плагин, как ожидалось

Случай 2: не применяется, как ожидалось

используя:

 plugins {
    id("java")
    id("org.danilopianini.publish-on-central")
}
  

плагин не применяется, как ожидалось

Случай 3: применен, его не должно было быть

но, наконец:

 plugins {
    id("maven-publish")
    id("org.danilopianini.publish-on-central")
}
  

пытается применить плагин и терпит неудачу с:

 FAILURE: Build failed with an exception.

* Where:
Build file '/tmp/junit876726632157783854/build.gradle.kts' line: 1

* What went wrong:
An exception occurred applying plugin request [id: 'org.danilopianini.publish-on-central']
> Failed to apply plugin [id 'org.danilopianini.publish-on-central']
   > SoftwareComponentInternal with name 'java' not found.

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'org.danilopianini.publish-on-central']
[cut]
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'org.danilopianini.publish-on-central']
    ... 128 more
Caused by: org.gradle.api.UnknownDomainObjectException: SoftwareComponentInternal with name 'java' not found.
    at org.gradle.api.internal.DefaultNamedDomainObjectCollection.createNotFoundException(DefaultNamedDomainObjectCollection.java:489)
    at org.gradle.api.internal.DefaultNamedDomainObjectCollection.getByName(DefaultNamedDomainObjectCollection.java:323)

  

Который выглядит для меня как попытка применить плагин независимо от того, что плагин Java не был применен.

Знаете ли вы какой-либо способ настроить плагин для реагирования на несколько приложений плагина?