我有以下项目结构
-->Starnderd Location
-->Project1
-->settings.gradle
-->build.gradle
-->Subproject11
-->build.gradle
-->Subproject12
-->build.gradle
-->Project2
-->settings.gradle
-->build.gradle
-->Subproject21
-->build.gradle
-->Subproject22
-->build.gradle
-->build.gradle
-->settings.gradle
上述项目结构的思想是:多个项目包含多个子项目,每个项目都可以依赖于其他项目。此外,项目中的子项目可能与同一项目中的其他子项目有依赖关系。项目将在根中的settings.gradle中指定。同时,每个项目中的gradle会说出该特定项目的子项目是什么。
我的设置.根部的Gradle看起来像
include 'Project1',
'Project2'
和Project1设置。Gradle将看起来像
include 'SubProject11'
'SubProject12'
其他依赖关系顺序是在相应的build.gradle文件中定义的,如果我在根位置(标准位置)内进行gradle clean build install,它似乎不会使用项目级别settings.gradle文件中的配置。
我在这里做错了什么?
我能够用一种比较干净的方法解决这个问题。改进当然是受欢迎的!
虽然Gradle不支持多个settings.Gradle
脚本,但可以创建单独的子项目,每个子项目都具有自己的settings.Gradle
文件。假设你有多个项目A,它依赖于多个项目B,每个项目都有自己的子项目。您的目录结构可能如下所示:
A
- settings.gradle
- foo
- faz
\ B
- settings.gradle
- bar
- bap
Gradle希望A/settings.Gradle
的外观如下所示:
include ':foo', ':faz', 'B:bar', 'B:bap'
apply from: 'B/settings.gradle'
include ':foo', ':faz'
如果尝试此操作,您将发现Gradle失败,因为它为:bar
和:bap
生成了错误的projectdir
。它错误地假设B的includes是相对于settingsdir
的,当从该项目根目录调用Gradle时,a/
恰好是a/
。要解决此问题,可以添加另一个脚本,如b/settings-parent.gradle
(确切名称不重要):
apply from: 'settings.gradle'
def updateProjectPaths(Set<ProjectDescriptor> projects) {
projects.each { ProjectDescriptor project ->
String relativeProjectPath = project.projectDir.path.replace(settingsDir.path, "")
project.projectDir = new File("B/$relativeProjectPath")
// Recursively update paths for all children
updateProjectPaths(project.children)
}
}
updateProjectPaths(rootProject.children)
这会将settingsdir.path
剥离,并将路径前缀为b/
。这可以扩展到settings[-parent].gradle
文件的多层,方法是让每一层都将自己添加到路径上。现在将此脚本应用于A/settings.gradle
:
apply from: 'B/settings-parent.gradle'
include ':foo', ':faz'
使用此方案,新的B项目不会不必要地破坏A/settings.gradle
,并且可以使用所有项目,而无需显式引用B子项目。例如,如果':foo'
希望使用'b:bap'
,它可以简单地声明:
compile project(':bap')
多项目 通常在一个工程中构建多个项目间会有关联,尤其是它们都依赖一个项目时可以很容易的更新项目 在一个工程中每个子项目都会有自己的源代码目录、生成各自的jar包当执行 package 时. 一个项目通过申明一个 Project 类型的懒值来定义,例如: lazy val util = project lazy val core = project 这个变量值名称将被用来当做 Project Id
简介 每一个活跃的项目会随着时间慢慢增长的,一开始可能只是个很小的项目到后面可能包含很多包和类。为了提高可维护性和解藕的目的,你可能想把项目根据逻辑和功能来划分成一个个模块。模块通常按照等级来组织,相互之间可以定义依赖。 Gradle给项目模块化提供了强大的支持,在Gradle中每个模块都是一个项目,我们称之为多项目构建,这一章介绍Gradle的多项目构建。
我有一个多项目分级建筑在当地工作。有一个父级文件build.gradle设置。gradle文件将项目分配给它们各自的分级生成文件: 错误仍然相同,build.gradle文件(父文件)无法识别依赖项任务查看调试语句,找到并识别子生成分级文件:使用生成文件'/var/../LoadRemote/RemoteLoad_build.gradle'计算项目':LoadRemote'。对加载构建文件显示相同
我正在改变我们的项目,以使用gradle作为构建工具,但正在与2个问题斗争;
主要内容:多项目构建的结构,指定常规构建配置,项目指定配置和依赖关系,Gradle多项目构建的示例,子项目配置,参考可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。Gradle完美支持这种多项目构建的场景。 多项目构建的结构 这种构建有各种形状和大小,但它们都有一些共同的特点 - 在项目的根目录或主目录中都有一个文件。 根目录或主目录都有一个文件。 具有自己的构建文件的子目录(某些多项目构建可能会省略子项