我在我的项目中使用Gradle 2.12(或更新版本)和适当版本的Android Gradle插件。 Gradle 2.12引入了compileOnly
配置,为什么我在尝试使用它时会出错呢?
无法为参数
找到方法compileOnly()
答案 0 :(得分:11)
请注意以下关于新compileOnly
configuration的Gradle 2.12发行说明的句子(我的重点):
现在,您可以声明依赖项仅在编译时与Java插件结合使用。
因此,Java Gradle插件是我们在回答此问题时需要考虑的一个组件。我们可以找到Java Gradle插件source code中声明的compileOnly
配置,以获得足够新的版本。
但是, Android Gradle插件不会直接扩展Java Gradle插件。事实上,我认为Android插件代表了一种“frankenplugin”,其中一些功能借用但不是来自Java插件的继承。以下大量的源代码支持这个想法。
来自the base Android plugin class:
project.apply plugin: JavaBasePlugin
Android Gradle插件因此包含来自base Java Gradle plugin的full Java Gradle plugin,而不是的功能。此外,有an explicit check完整的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插件之前,它可能不会出现。
答案 1 :(得分:4)
简单使用provided
代替compileOnly
请参阅https://github.com/google/auto/issues/324#issuecomment-212333044