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
}
}
在第二种情况下,启动:
案例一:如预期
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 插件没有被应用。
您知道任何配置插件以响应多个插件应用程序的方法吗?
解决方案
推荐阅读
- azure-devops - 能否在 PR 开始后添加更多必需的审阅者?
- java - Maven 测试:在 Jenkins 构建期间为一些测试类签出其他存储库
- python - 如何在我可以按空格键重新射击子弹之前添加延迟,这样我就不会偶尔出现故障,如果子弹不走的话
- pyspark - PySpark:如何使用带有 JDBC 连接的 MySQL 函数?
- kotlin - 对类似的合约/状态/流使用 Java/Kotlin 继承
- c++ - 如何计算枚举的大小
- c# - 获取 Azure 通知中心的 APNS 证书
- windows - 用于测试蓝牙的应用程序是什么?
- javascript - 浏览器未在页面重新加载时调用新的 Ajax 请求
- php - 如何使用 WPQuery 获取有序结果