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

Ali*_*lix 10 gradle android-gradle-plugin

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

无法为参数找到方法compileOnly()

stk*_*ent 12

请注意Gradle 2.12发行说明中关于新compileOnly配置的以下句子(我的重点):

您现在可以声明依赖项仅在编译时与Java插件一起使用.

所以Java Gradle插件是我们在回答这个问题时需要考虑的一个组件.我们可以compileOnly在Java Gradle插件源代码中找到声明的配置,以获得足够新的版本.

但是,Android Gradle插件不直接扩展Java Gradle插件.事实上,我认为Android插件代表了一种"frankenplugin",借用了一些功能,但没有从Java插件继承.以下大量源代码支持这一想法.

基础Android插件类:

project.apply plugin: JavaBasePlugin
Run Code Online (Sandbox Code Playgroud)

因此,Android的摇篮插件从整合功能的基础的Java插件的摇篮, Java的摇篮插件.此外,还有一个明确的检查,即完整的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.")
}
Run Code Online (Sandbox Code Playgroud)

根据这些信息,我的猜测是,compileOnly尚未手动从Java Gradle插件移植到Android Gradle插件.在我们获得最低Gradle版本设置为2.12或更高版本的Android Gradle插件之前,它可能不会出现.


Fil*_*usa 4

简单使用provided代替compileOnly

请参阅https://github.com/google/auto/issues/324#issuecomment-212333044