Estoy tratando de escribir un nuevo complemento de Gradle que requiere la aplicación de dos complementos: java o java-library , o maven-publish . Estoy escribiendo el complemento en Kotlin.
Puedo fácilmente, siguiendo la guía de Gradle , hacer que el complemento reaccione a una sola aplicación de complemento:
project.plugins.withType(MavenPublishPlugin::class.java) { // My stuff }Pero no puedo hacer lo mismo por requerir dos aplicaciones de complemento:
project.plugins.withType(JavaPlugin::class.java) { project.plugins.withType(MavenPublishPlugin::class.java) { // My stuff } }En el segundo caso, lanzar con:
plugins { id("java") id("maven-publish") id("org.danilopianini.publish-on-central") }ejecuta el complemento como se esperaba
utilizando:
plugins { id("java") id("org.danilopianini.publish-on-central") }no aplica el complemento, como se esperaba
pero finalmente:
plugins { id("maven-publish") id("org.danilopianini.publish-on-central") }intenta aplicar el complemento y falla con:
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)Lo que me parece un intento de aplicar el complemento independientemente del hecho de que no se aplicó el complemento de Java.
¿Conoce alguna forma de configurar un complemento para que reaccione a múltiples aplicaciones de complementos?