我有一个具有以下结构的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)
提供的依赖项可以使用。
我想知道api
和api
相对于模块是像上面那样直接编译或使用的吗?
答案 0 :(得分:2)
这里有两件事在起作用:
api
和implementation
的分隔。简而言之,implementation
范围内的依赖项仅在运行时处可见,因为它们是实现的详细信息。此类库将在其已发布的Maven元数据中使用runtime
范围。 the documentation compile
和runtime
,因此所有runtime
依赖项都出现在了编译类路径上。摇篮5 changes this 因此,当您发布组件时,Gradle 4.x的局限性意味着common
的依赖项可用于app
。请注意,如记录所示,移至Gradle 5会在此处造成损坏。
而且,当您直接使用该项目时,分隔会正确执行。
解决方法是简单地将依赖关系作为公共api的一部分提升为api
中的common
配置,对于运行时,请在{{1 }},毕竟它们是直接需要的。