我有一个像这样的gradle项目:
root
|
|---- projectA
|
|---- projectB
...
我的root build.gradle包含projectA和projectB所需的依赖项。我已经像这样定义了它们:
subprojects {
repositories {
jcenter()
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.google.guava:guava:23.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
现在我试图从projectB添加对projectA的依赖,所以我的projectB build.gradle看起来像这样:
dependencies {
implementation project(':projectA')
}
和projectB settings.gradle:
include ':projectA'
project(':projectA').projectDir = new File(settingsDir, '../projectA')
这当前失败了,因为projectA和B不依赖root来获取他们所需的依赖项。
我可以在root上从projectA添加另一个依赖项,或者从一个根项目共享相同依赖项的默认gradle方法是什么?
答案 0 :(得分:1)
您的模块(A和B)未正确设置为根项目的子模块。
在基本文件夹中,根据需要创建settings.gradle
文件,并添加子模块定义:
<强>根/ settings.gradle 强>
include 'projectA', 'projectB'
projectB的build.gradle
文件是可以的,然后你需要删除root/projectB/settings.gradle
文件;子模块及其位置在父构建文件中指定。
答案 1 :(得分:1)
使用&#34;编译&#34;指定依赖关系关键字已被弃用。要使用的新关键字是&#34;实施&#34;。 (见this SO question for an example of explanation。)&#34;编译&#34;之间的区别。和&#34;实施&#34;因为它与你的情况有关,是&#34;编译&#34;将依赖关系传播到所有连接的模块,同时&#34;实现&#34;是单级的。所以,如果你有
root
module A
module B
和模块B使用&#34; compile&#34;引入了一个depandency,然后root可以访问该依赖项。 但是如果您现在更改B以使用&#34; implementation&#34;来实现依赖关系,那么您仍然需要将依赖项添加到根项目的build.gradle。
为什么这有关系?因为儿童模块不允许知道其父母是谁。因此,虽然A和B都看到了你带入root的依赖关系,但他们真的不应该 - 看到这些依赖关系是Studio工作原理的一个怪癖。这也是为什么答案&#34;我可以在root&#34;中添加来自projectA的另一个依赖项。是的,不,你在那里运气不好,它会造成循环依赖,而且不允许&#34;。
我尝试的依赖项是:
在模块A和模块B中:
dependencies {
implementation 'com.google.guava:guava:23.0'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
然后在模块B中,您执行:
implementation project(':projectA')
然后在root中,你依赖于A和B.