gradle - 依赖项目中缺少依赖项

标签 gradle android-gradle-plugin

我有一个具有以下结构的android项目:

-- Calendar
------app (app module)
----------build.gradle (module level)
------build.gradle (project level)
------Commons(A common project which i reuse across various projects)
----------common (common module in Commons project)
-------------build.gradle (for only common module level)
----------build.gradle(for Commons Project)

现在的问题是,如果我编译 Commons,将其部署到 bintray,然后将其用作 implementation 'com.amitkma.Commons:common:1.0.0'在 app 模块中,所有依赖项(在 common build.gradle 中实现)也可以在 app 模块中使用。但是如果我像下面这样使用它implementation project(:Commons:common) , 仅使用 api 提供的依赖项可以使用。

我想知道 api 和有什么区别和 implementation关于模块是否像上面那样直接编译或使用?

最佳答案

这里有两件事在起作用:

  • api的分离和 implementation声明依赖项时。简而言之,implementation 中的依赖项范围仅在运行时可见,因为它们是实现细节。此类库将使用 runtime范围在他们发布的 Maven 元数据中。更多信息请访问 the documentation
  • 在 Gradle 5.0 之前,Maven 元数据范围 compileruntime由 Gradle 混合,因此所有 runtime依赖项确实出现在编译类路径中。 Gradle 5 changes this

  • 所以当你发布你的组件时,Gradle 4.x 的限制意味着你的 common app 可以使用依赖项.请注意,如文档所述,迁移到 Gradle 5 将导致那里的损坏。
    并且当您直接使用项目时,会正确执行分离。

    解决方法是简单地将作为公共(public) api 一部分的依赖项提升到 api common 中的配置对于运行时的,在 app 中声明它们毕竟它们是它直接需要的。

    关于gradle - 依赖项目中缺少依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145395/

    相关文章:

    gradle - 是否可以将 Gradle 构建脚本划分为单独的源文件?

    android - 将库添加到 Android 项目后出错(发现多个文件的操作系统独立路径 'META-INF/kotlinx-io.kotlin_module' )

    android - Android风格签名无法正常工作

    android - 无法解析 com.android.support :support-compat:25. 4.0

    Android Azure Devops Gradle 构建在签署 apk w zipalign 时失败,退出代码 1

    gradle - 为什么android gradle maven发布工件bundleRelease找不到

    java - Gradle 和用于 Android 构建的 Maven 存储库的悲伤

    android - 获取 gradle 构建的 aapt2 参数?

    Android gradle 实验性插件路线图

    带有 Gradle 2.0 和 Dexguard bootClasspath 错误的 Android Studio 2.0