Gradle:将依赖性相同的模块添加到其他模块

时间:2016-04-04 13:10:05

标签: android android-studio gradle android-gradle build.gradle

我有3个模块(所有3个都是库项目): A,B,C

我想在Bmodule A中引用module C作为依赖。 app 模块具有A,B和C作为依赖性。

由于这是一个Android项目,我希望它类似于:

模块A

//    A/build.gradle

//remaining config
compile project(':B')

//    A/settings.gradle

include ':B'

模块C

//    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'

我的问题是: 这是如何内部处理的。如果涉及任何代码重复。 有没有更好的方法来处理这种依赖?

2 个答案:

答案 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.gradlelibB/build.gradle

compile project(':B')

否则,如果任何libA,libB,libC是单独的项目:

  1. 使用Maven存储库分发您的库
  2. 在settings.gradle中使用外部路径
  3. 在选项1.您应该使用 maven存储库(您必须在私有或公共maven存储库中发布库)。
    在这种情况下,gradle使用pom文件下载依赖项,该文件将包含依赖项列表。

    libA/build.gradlelibB/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在他的回答中所说的那样。