Я пытаюсь написать новый плагин 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 не был применен.
Знаете ли вы, как настроить плагин для реагирования на несколько приложений плагинов?