【问题标题】:How i can use one project with sub projects in another project as sub project (sub module) with gradle?我如何将一个项目与另一个项目中的子项目一起用作带有 gradle 的子项目(子模块)?
【发布时间】:2014-02-08 00:39:05
【问题描述】:

有一些 gradle - android 项目 A。它取决于几个 gradle 子项目,每个子项目位于自己的 git 存储库中,并通过 git 子模块连接到我们的项目(我可以在我的 owr 存储库中查看它作为我项目的子目录。)

项目层次结构是:

└─ ProjectRootDir                                  --- projectA
             ├─ gradle
             ├─ mainProject
             │   └─ subprojectA                    --- submoduleA
             │        ├─ libs
             │        ├─ src
             │        ├─ settings.gradle
             │        └─ build.gradle
             ├─ relatedProjects                   --- folder for submodules
             │  ├─ subprojectA                    --- submoduleA
             │  │  ├─ library
             │  │  ├─ gradle
             │  │  ├─ libs
             │  │  └─ relatedProjects             --- related projects for submoduleA
             │  │     ├─ subprojectAA             --- first submodule of submoduleA
             │  │     │  ├─ Test
             │  │     │  ├─ libs
             │  │     │  ├─ src
             │  │     │  ├─ settings.gradle
             │  │     │  └─ build.gradle
             │  │     └─ subprojectAB             --- first submodule of submoduleA
             │  │        ├─ libs
             │  │        ├─ src
             │  │        ├─ tests
             │  │        ├─ settings.gradle
             │  │        └─ build.gradle
             │  └─ subprojectB                    --- submodule of submoduleB
             │     ├─ demo
             │     ├─ gradle
             │     ├─ library
             │     ├─ settings.gradle
             │     └─ build.gradle
             ├─ settings.gradle
             └─ build.gradle

mainProject build.gradle

apply plugin: 'android'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile project(':relatedProjects:subprojectB:library')
    compile project(':relatedProjects:subprojectA:library')
}

rootProject settings.gradle

include ':mainProject'
include ':relatedProjects:subprojectB:library'
include ':relatedProjects:subprojectA'

rootProject build.gradle

 buildscript {
     repositories {
         mavenCentral()
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:0.+'
     }
 }

subprojectA settings.gradle

include ':library'
include ':relatedProjects:subprojectAA'
include ':relatedProjects:subprojectAB'

subprojectA build.gradle

apply plugin: 'android-library'

repositories {
    mavenCentral()
    flatDir {
        name 'localRepository'
        dirs 'src/main/libs'
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    sourceSets {
        instrumentTest {
            assets.srcDirs = ["src/tests/assets"]
            res.srcDirs = ["src/tests/res"]
            resources.srcDirs = ["src/tests/src"]
            java.srcDirs = ["src/tests/src"]
        }
    }
}

dependencies {
    compile project(':relatedProjects:submoduleAA')
    compile project(':relatedProjects:submoduleAB')
}

但是当我尝试构建 ./gradlew assembleDebug 我每次都收到错误

FAILURE: Build failed with an exception.

* Where:
Build file   '.../ProjectRootDir/relatedProjects/submoduleA/library/build.gradle'   line: 38

* What went wrong:
A problem occurred evaluating project ':relatedProjects:submoduleA:library'.
> Project with path ':relatedProjects:submoduleAA' could not be found in project     ':relatedProjects:submoduleA:library'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to     get more log output.

第 38 行是

       compile project(':relatedProjects:submoduleAA')

但是当我为 submoduleA 项目运行 ./gradlew assembleDebug 时,一切正常。

请大家帮帮我。我如何将一个项目与另一个项目中的子项目一起用作子项目(子模块)?

【问题讨论】:

标签: android git gradle project-structure


【解决方案1】:

一个 Gradle 构建只能有一个 settings.gradle,并且您只能在属于同一构建的项目之间有项目依赖关系。跨越构建边界,您通常会通过(本地或远程)Maven 或 Ivy 存储库交换 二进制工件(外部依赖项)。当然,两个settings.gradle 可以包含一些相同的项目。 IntelliJ 还具有将另一个 Gradle 构建添加到同一个 IntelliJ 项目的功能,也许这个功能也存在于 Android Studio 中。

【讨论】:

  • 谢谢。我想,我的问题是主项目寻找:relatedProjects:submoduleAA 与主项目相关。我也想知道,如何在我的根项目中使用子项目(非工件)。因为我认为使用子项目的好方法,然后将其复合到主项目中。
  • 我不明白这个问题。也许问一个新问题。
  • 我的意思是我可以通过哪种方式为子项目添加子项目。 Android Studio 只允许创建一级子项目。当我尝试为存在一个创建库子项目时,Idea 在项目树的根目录中创建它。为什么根项目应该知道子项目的子项目?
  • 这是 Gradle 的工作方式。 settings.gradle 声明构建的所有项目,而不仅仅是直系子项。 subprojects { ... }(如果你在谈论这个)指的是逻辑项目层次结构中当前项目之下的所有项目(不仅仅是直系子项)。您可以在Gradle User Guide 的“多项目构建”一章中了解有关这些概念的更多信息。另请查看完整 Gradle 发行版中的示例构建。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2015-04-02
  • 2021-06-16
  • 2019-10-23
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多