依赖项目中缺少依赖

时间:2019-01-11 11:13:15

标签: gradle android-gradle

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

Castle.Core

现在的问题是,如果我编译Commons,将其部署到bintray,然后在应用程序模块中用作-- 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) ,则所有依赖项(在通用build.gradle中实现)都可以在应用程序中使用模块也。但是如果我像下面那样使用它 implementation 'com.amitkma.Commons:common:1.0.0',只有通过implementation project(:Commons:common)提供的依赖项可以使用。

我想知道apiapi相对于模块是像上面那样直接编译或使用的吗?

1 个答案:

答案 0 :(得分:2)

这里有两件事在起作用:

  1. 声明依赖项时apiimplementation的分隔。简而言之,implementation范围内的依赖项仅在运行时处可见,因为它们是实现的详细信息。此类库将在其已发布的Maven元数据中使用runtime范围。 the documentation
  2. 中的更多信息
  3. 在Gradle 5.0之前,Gradle混合了Maven元数据作用域compileruntime,因此所有runtime依赖项都出现在了编译类路径上。摇篮5 changes this

因此,当您发布组件时,Gradle 4.x的局限性意味着common的依赖项可用于app。请注意,如记录所示,移至Gradle 5会在此处造成损坏。 而且,当您直接使用该项目时,分隔会正确执行。

解决方法是简单地将依赖关系作为公共api的一部分提升为api中的common配置,对于运行时,请在{{1 }},毕竟它们是直接需要的。