在 Android 项目中使用“compileOnly”范围?

2024-04-24

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

找不到参数的compileOnly()方法


请注意 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插件是我们在回答这个问题时需要考虑的一个组件。我们可以找到compileOnlyJava 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 插件之前,它可能不会出现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 项目中使用“compileOnly”范围? 的相关文章

随机推荐

  • 将 AWS Lambda 设置为权限策略中的主体

    我有一个非常具体的 AWS Lambda 函数 我想将其作为 AWS Secret Manager 权限策略的主体 以便它可以检索机密 我想专门将此权限授予我的 Lambda 我创建了一个角色并将该角色分配给该策略 然而 我希望能够明确地写
  • 由于 ssl 错误,无法在 python 3.6 中 pip 安装软件包

    我正在远程服务器上工作 当我尝试在虚拟环境中使用 pip 安装任何内容时 出现错误 venv barta bivoj program pip install r requirements txt pip is configured with
  • java方法中的可选参数

    我想制作一个需要 1 个必需参数和 1 个可选参数的方法 但我发现如何制作一个可选数组 方法是在参数 int b 中制作 但这是一个数组 我想制作它只是这个值是 null 或用户输入它 我可以通过创建 2 个同名的方法来实现它 但一个具有单
  • Android:如何将十字图标放在 autocompletetextView 顶部

    我在将十字按钮放在文本视图顶部时遇到问题 我正在使用 LinearLayout 并且它没有出现 而在 Framelayout 上它可以工作 但这并不能解决我的目的 我附上我的 XML 供参考 请帮助我解决这个问题
  • cppreference 使用术语“[对象的]标识”对于 c++11 和 c++17 来说是两种不同的含义吗?

    我以为我已经设法完全理解 在其他 SO 问题的帮助下 谢谢 C 17 关于值类别的更改 但现在我注意到这个问题 这表明我并不真正理解它们 在 C 11 中 对值类别有 具有同一性 可以从其中移动 的解释 并且 同一性 含义的定义仍然存在于参
  • 使用 Gremlin 查询语言获取边属性以及源和目标顶点 ID

    我正在尝试检索边缘属性作为值以及目标和源节点 ID 我当前的数据库如下所示 Edge id label outV inV name ID 0 edge 0 1 E 0 Nodes id label name ID 0 node A 0 1
  • 如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?

    当我通过 SBT 在 Jenkins 中运行 Specs2 测试时 一旦一个测试失败 构建就会被标记为失败 由于 Jenkins 通常会区分构建失败和测试失败 所以我想改变这一点 我知道 Jenkins 中的构建失败是通过调用 SBT 的退
  • 使用带有 Django CSRF 保护的 angular2 http 请求的正确方法是什么?

    在Angular1中可以通过配置 http provider来解决这个问题 喜欢 app config function httpProvider httpProvider defaults xsrfCookieName csrftoken
  • 对 VBO 中的特定三角形使用不同的纹理

    我有 9 个由三角形组成的四边形 如下所示 我在用着VBO存储有关它们的数据 它们的位置和纹理坐标 我的问题是 是否可以仅使用一个来使四边形 5 具有与其余四边形不同的纹理VBO and shader 绿色代表纹理 1 黄色代表纹理 2 到
  • 如何使用 opencv 从字节显示视频?

    我正在开展一个项目 其中我们使用无线电调制解调器将数据 视频和遥测 从无人机传输到地面站 我们需要做的是实时显示视频 并能够知道 C 中的每一块遥测数据对应哪一帧 数据被解封装为遥测和视频 mpeg4 字节 由于我对 OpenCV 有一些经
  • 在python中读取.xlsx格式

    我必须在 python 中每 10 分钟读取一次 xlsx 文件 做到这一点最有效的方法是什么 我尝试过使用 xlrd 但它不读取 xlsx 根据他的文档 但我不能这样做 获取Unsupported format or corrupt fi
  • Pulp.solvers.PulpSolverError:PuLP:无法执行glpsol.exe

    我是 python 和优化的新手 我收到一些错误 请帮我解决 我尝试在运行 Anaconda 3 的 PyCharm 中运行下面提到的代码 from pulp import x LpVariable x 0 3 y LpVariable y
  • 在不刷新页面的情况下如何使用ajax/jQuery显示数据库中的值

    通过jQuery ajax将数据插入数据库后 同时从数据库获取值而不刷新页面如何使用codeigniter显示数据库值 这是我的代码 Script
  • Go TCP 读取是非阻塞的

    我正在尝试用 Go 创建服务器和客户端 我已经成功地与服务器和客户端进行通信 但我遇到的问题是golang中的TCP读取是非阻塞的 我想知道 golang 中的读取是否有可能像 C 中的读取一样阻塞 谢谢 EDIT 这是服务器的源代码 fu
  • Brython 完全是客户端吗?

    我有一段用Python编写的代码 我想将该代码放在网页中 Brython 似乎是将这两件事粘合在一起的最简单方法 但我没有可以在服务器端实际运行代码的服务器 Brython 是否需要服务器端代码 或者我可以通过 例如 Dropbox 便宜地
  • 具有多个构造函数的 C++ init 成员变量

    通常构造函数应该是这样的 ctor1 SmallSim SmallSim mSimInit false mServersCreated false mTotalCPUTime 0 如果我有多个构造函数会怎样 在我看来 如果我从第二个构造函数
  • HttpSecurity、WebSecurity 和 AuthenticationManagerBuilder

    谁能解释一下何时覆盖configure HttpSecurity configure WebSecurity and configure AuthenticationManagerBuilder 配置 AuthenticationManag
  • 以编程方式创建 dataList

    我正在尝试以编程方式创建一个表 其中一个单元格包含数据列表 下面是片段 CustomTag phone form class PhoneForm extends PolymerElement observable List
  • CameraX 多个后置摄像头

    我正在尝试使用 CameraX 实现自定义相机应用程序 鉴于现在很多新设备都有多个后置摄像头 我也想将其包括在内 所以基本上 用户可以选择使用哪个相机 我已使用 addCameraFilter 选项尝试了以下操作 val cameraSel
  • 在 Android 项目中使用“compileOnly”范围?

    我在项目中使用 Gradle 2 12 或更高版本 以及适当版本的 Android Gradle 插件 Gradle 2 12 引入了compileOnly配置 那么为什么当我尝试使用它时会出现错误呢 找不到参数的compileOnly 方