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