Android 如何将一个项目与另一个项目中的子项目一起用作gradle的子项目(子模块)?
有一些gradle-android项目A。它依赖于几个gradle子项目,每个子项目都位于自己的git存储库中,并通过git子模块连接到我们的项目。我可以在我的owr存储库中查看它,作为我项目的It子目录 项目层级为:Android 如何将一个项目与另一个项目中的子项目一起用作gradle的子项目(子模块)?,android,git,gradle,project-structure,Android,Git,Gradle,Project Structure,有一些gradle-android项目A。它依赖于几个gradle子项目,每个子项目都位于自己的git存储库中,并通过git子模块连接到我们的项目。我可以在我的owr存储库中查看它,作为我项目的It子目录 项目层级为: └─ ProjectRootDir --- projectA ├─ gradle ├─ mainProject │ └─ subpr
└─ 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')
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.+'
}
}
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')
}
rootProject settings.gradle
include ':mainProject'
include ':relatedProjects:subprojectB:library'
include ':relatedProjects:subprojectA'
include ':library'
include ':relatedProjects:subprojectAA'
include ':relatedProjects:subprojectAB'
rootProject build.gradle
apply plugin: 'android'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile project(':relatedProjects:subprojectB:library')
compile project(':relatedProjects:subprojectA:library')
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.+'
}
}
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')
}
subprojectA settings.gradle
include ':mainProject'
include ':relatedProjects:subprojectB:library'
include ':relatedProjects:subprojectA'
include ':library'
include ':relatedProjects:subprojectAA'
include ':relatedProjects:subprojectAB'
子项目a build.gradle
apply plugin: 'android'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile project(':relatedProjects:subprojectB:library')
compile project(':relatedProjects:subprojectA:library')
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.+'
}
}
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')
但当我为子模块项目运行./gradlew assembleDebug时,一切都正常
请大家帮帮我。如何将一个项目与另一个项目中的子项目一起用作子项目子模块 Gradle生成只能有一个settings.Gradle,并且您只能在属于同一生成的项目之间具有项目依赖关系。跨越构建边界,您通常会通过本地或远程Maven或Ivy存储库交换二进制工件和外部依赖项。当然,两个settings.gradle可能包含一些相同的项目。IntelliJ还有一个功能,可以将另一个Gradle版本添加到同一IntelliJ项目中,也许Android Studio中也存在此功能。谢谢。我想,我的问题是主项目要寻找的:relatedProjects:submoduleAA与主项目相关。我还想知道,如何在我的根项目中使用子项目和非工件。因为我认为使用子项目,然后将其复合到主项目是一种很好的方法。我不理解这个问题。也许会问一个新问题。我的意思是我可以用哪种方式为子项目添加子项目。Android Studio只允许创建一级子项目。当我尝试为existone创建库子项目时,Idea会在项目树的根目录中创建它。为什么根项目应该了解子项目的子项目?Gradle就是这样工作的。settings.gradle声明生成的所有项目,而不仅仅是直接子项。和子项目{…}如果您所说的是指逻辑项目层次结构中当前项目下的所有项目,而不仅仅是直接子项目。您可以在的“多项目构建”一章中了解有关这些概念的更多信息。另外,请查看完整Gradle发行版中的示例版本。抱歉,这里讨论了我的问题: