我有一个使用Gradle多项目构建的项目。 一些子项目是用Java编写的,其他子项目是用Kotlin编写的。
我们有一个顶级build.gradle
文件。该文件包含以下部分:
allprojects {
plugins.withType(JavaPlugin) {
// All the stuff that all Java sub-projects have in common
...
}
// All the stuff that all sub-projects have in common
...
}
我们现在想为我们的Kotlin子项目介绍通用设置,但是我找不到要使用的withType
。
我们Kotlin项目的build.gradle
文件以
plugins {
id "org.jetbrains.kotlin.jvm" version "1.3.0"
}
但是withType(org.jetbrains.kotlin.jvm)
和withType(KotlinProject)
都不起作用。
在那里我必须使用哪种类型?谢谢!
答案 0 :(得分:4)
您可以按id
而不是其类型来引用Kotlin插件,如下所示:
allprojects {
plugins.withType(JavaPlugin) {
// All the stuff that all Java sub-projects have in common
// ...
}
plugins.withId("org.jetbrains.kotlin.jvm") {
// All the stuff that all Kotlin sub-projects have in common
// ...
}
}
对于Java插件,它更容易一些,您可以使用plugins.withType
,因为它是Gradle的“核心”插件,而JavaPlugin
类可以用作Gradle Default Imports的一部分( import org.gradle.api.plugins.*
)
答案 1 :(得分:1)
所应用的kotlin插件实际上不是select *
from t
where date >= sysdate - 1
order by date desc
offset 19 fetch next 21 rows only;
,而是KotlinPlugin
。另外,有必要使用规范名称来查找类型。
KotlinPluginWrapper
要捕获所有包装器实现,也可以使用plugins.withType(org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper) {
// All the stuff that all Kotlin sub-projects have in common
...
}
。
答案 2 :(得分:1)
一种解决方案是开始为您的项目使用自定义插件。这正是AndroidX团队所做的
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
class MyPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.plugins.all {
when (it) {
...
is KotlinBasePluginWrapper -> {
project.tasks.withType(KotlinCompile::class.java).configureEach { compile ->
compile.kotlinOptions.allWarningsAsErrors = true
compile.kotlinOptions.jvmTarget = "1.8"
}
}
}
}
}
您需要设置所有样板才能进行此设置,但是长期收益很高。
了解更多
https://www.youtube.com/watch?v=sQC9-Rj2yLI&feature=youtu.be&t=429