请注意 Gradle 2.12 发行说明中有关新功能的以下句子compileOnly配置 https://docs.gradle.org/2.12/release-notes#support-for-declaring-compile-time-only-dependencies-with-java-plugin(我的重点):
您现在可以声明仅在编译时使用的依赖项与 Java 插件结合使用.
所以Java Gradle插件是我们在回答这个问题时需要考虑的一个组件。我们可以找到compileOnly
Java Gradle 插件中声明的配置源代码 https://github.com/gradle/gradle/blob/REL_2.14.1/subprojects/plugins/src/main/groovy/org/gradle/api/plugins/JavaPlugin.java#L59对于足够新的版本。
然而,Android Gradle 插件不直接扩展 Java Gradle 插件。事实上,我相信 Android 插件代表了一种“frankenplugin”,具有一些功能borrowed但不是遗传来自 Java 插件。以下源代码块支持了这个想法。
From Android 插件基类 https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy#199:
project.apply plugin: JavaBasePlugin
因此,Android Gradle 插件合并了来自baseJava Gradle 插件 https://github.com/gradle/gradle/blob/REL_2.14.1/subprojects/plugins/src/main/groovy/org/gradle/api/plugins/JavaBasePlugin.java, not来自fullJava Gradle 插件 https://github.com/gradle/gradle/blob/REL_2.14.1/subprojects/plugins/src/main/groovy/org/gradle/api/plugins/JavaPlugin.java。此外,还有明确的检查 https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy#273完整的 Java Gradle 插件不与 Android Gradle 插件一起应用:
// get current plugins and look for the default Java plugin.
if (project.plugins.hasPlugin(JavaPlugin.class)) {
throw new BadPluginException(
"The 'java' plugin has been applied, but it is not compatible with the Android plugins.")
}
根据这些信息,我的猜测是compileOnly
尚未从 Java Gradle 插件手动移植到 Android Gradle 插件。在我们获得最低 Gradle 版本设置为 2.12 或更高版本的 Android Gradle 插件之前,它可能不会出现。