如何从自定义 Gradle 插件配置 Gradle Java 插件

How to configure Gradle Java plugin from a custom Gradle plugin

我在 Kotlin 1.2.50 中编写了一个自定义 Gradle 插件,用于 Gradle 4.8。

我已经通过插件的应用方法成功应用了 Java 插件:

override fun apply(project: Project) {
    project.pluginManager.apply(JavaPlugin::class.java)
    // configure Java plugin here
}

如何配置 Java 插件?

例如,我想实现以下等同于通常在 build.gradle.kts 中的效果:

java {
    sourceCompatibility = VERSION_1_10
    targetCompatibility = VERSION_1_10
}

我仔细研究了 Gradle 代码并找到了解决方案:

override fun apply(project: Project) {
    project.pluginManager.apply(JavaPlugin::class.java)

    val javaPlugin = project.convention.getPlugin(JavaPluginConvention::class.java)

    javaPlugin.sourceCompatibility = VERSION_1_10
    javaPlugin.targetCompatibility = VERSION_1_10
}

我知道这可能有点晚了,但对于任何在 2022 年寻求此问题答案的人来说,官方指南显示 how to configure plugins via extensions。此外,为了完整起见,本指南建议不要强制使用某些插件,而是在它们可用时进行被动配置。

所以今天,您的问题的解决方案可能如下所示(很抱歉使用 Java 代码,尽管代码应该可以直接映射到 Kotlin):

// enforcing the Java plugin
project.getPluginManager().apply(JavaPlugin.class);

JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
        javaPluginExtension.setSourceCompatibility(JavaVersion.VERSION_1_10);
javaPluginExtension.setTargetCompatibility(JavaVersion.VERSION_1_10);

或者像这样:

// reactively configuring the Java plugin
project.getPlugins().withType(JavaPlugin.class, javaPlugin -> {
    JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
        
    javaPluginExtension.setSourceCompatibility(JavaVersion.VERSION_1_10);
    javaPluginExtension.setTargetCompatibility(JavaVersion.VERSION_1_10);
});