在Android项目中使用'compileOnly'范围?

时间:2016-06-14 07:34:55

标签: gradle android-gradle

我在我的项目中使用Gradle 2.12(或更新版本)和适当版本的Android Gradle插件。 Gradle 2.12引入了compileOnly配置,为什么我在尝试使用它时会出错呢?

  

无法为参数

找到方法compileOnly()

2 个答案:

答案 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 pluginfull 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