我有3个模块(所有3个都是库项目):
A,B,C
我想在B
和module A
中引用module C
作为依赖。
app 模块具有A,B和C作为依赖性。
由于这是一个Android项目,我希望它类似于:
// A/build.gradle
//remaining config
compile project(':B')
和
// A/settings.gradle
include ':B'
// C/build.gradle
//remaining config
compile project(':B')
和
// C/settings.gradle
include ':B'
// app/build.gradle
//remaining config
compile project(':A')
// dependecy for module B is not needed since I would get the same set of APIs from A and B
compile project(':C')
和
// app/settings.gradle
include ':A',':C',':B'
我的问题是: 这是如何内部处理的。如果涉及任何代码重复。 有没有更好的方法来处理这种依赖?
答案 0 :(得分:1)
你可以这样做:
-root
|--build.gradle
|--settings.gradle
|--libA
|----build.gradle
|--libB
|----build.gradle
|--libC
|----build.gradle
|--app
|----build.gradle
在settings.gradle
:
include ':libA',':libB',':libC', ':app'
在libA/build.gradle
和libB/build.gradle
:
compile project(':B')
否则,如果任何libA,libB,libC是单独的项目:
在选项1.您应该使用 maven存储库(您必须在私有或公共maven存储库中发布库)。
在这种情况下,gradle使用pom文件下载依赖项,该文件将包含依赖项列表。
在libA/build.gradle
和libB/build.gradle
:
compile 'myLibB:X.X.X'
在选项2.使用:
-rootApp
|--build.gradle
|--settings.gradle
|--app
|----build.gradle
-rootLibA
|--build.gradle
|--settings.gradle
|--moduleA
|----build.gradle
在项目中,您可以参考外部模块。
只需使用:
在rootApp/settings.gradle
:
include ':app'
include ':myExternalLib'
project(':myExternalLib').projectDir=new File('pathLibrary')
在app/build.gradle
:
dependencies {
compile project(':myExternalLib')
}
注意myExternalLib
。
您必须在另一个项目中使用库的路径,而不是项目的根
在您的情况下,路径为rootLibA/moduleA
答案 1 :(得分:0)
不,没有代码重复。 Gradle将在编译另一个项目时使用由一个项目生成的类文件。
不,没有更好的方法 - 你的建议是常见做法。
我会在你的案例中使用多项目构建,就像Gabriele Mariotti在他的回答中所说的那样。