我按照本指南将项目拆分为模块/子项目:
https://docs.gradle.org/current/userguide/multi_project_builds.html
在主脚本build.gradle
中,我将配置应用于子项目:
subprojects {
repositories {
mavenCentral()
}
}
如果我从根构建目录运行子项目,则此方法运行良好:
mainProject$ ./gradlew clean :common:build
(成功构建:common
模块)
但是我希望能够构建:common
目录中的common
模块:
mainProject$ cd common
common$ ./gradlew clean build
如果未在common/build.gradle
文件中明确配置存储库,则此操作将失败。但是我已经在上面的父配置中做到了,我希望子项目在可能的情况下选择父配置。
因此,很容易配置父项目和子项目,因此当我从子项目目录运行子项目构建时,它也会考虑父配置(不仅考虑存储库配置,还考虑一些常量,依赖项等)。
答案 0 :(得分:0)
首先:您不应在每个子项目目录中都安装gradle包装器脚本,而应在根项目目录中仅安装一个gradle包装器。 然后,如果要从子项目目录调用build,则必须从父目录引用gradlew脚本:包装器文档https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:using_wrapper
中的一个注释中对此进行了说明。在官方文档的另一页中也有对此的引用: https://docs.gradle.org/current/userguide/intro_multi_project_builds.html#sec:executing_a_multiproject_build
还有最后一件事要注意。使用Gradle包装器时,第一种方法效果不佳,因为如果不在项目根目录中,则必须指定包装器脚本的路径。例如,如果您位于webservice子项目目录中,则必须运行../../gradlew build。
从子项目目录执行构建时,Gradle将按照您的期望自动搜索根项目配置:这是在初始化阶段完成的(请参见此处:https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization)
答案 1 :(得分:0)
问题出在子settings.gradle
中:子项目不应具有此文件,否则gradle会考虑当前目录和根项目!
https://docs.gradle.org/current/userguide/build_lifecycle.html#sub:project_locations
https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization