当前位置: 首页 > 知识库问答 >
问题:

Gradle:从父构建脚本配置子项目(模块)

蔚琦
2023-03-14

我按照以下指南将项目分为模块/子项目:

https://docs.gradle.org/current/userguide/multi_project_builds.html

在主脚本build.gradle中,我应用子项目的配置:

subprojects {
  repositories {
    mavenCentral()
  }
}

如果我从根build目录运行子项目build,这会很好:

mainProject$ ./gradlew clean :common:build 

(成功构建:通用模块)

但我希望能够在common目录中构建:common模块:

mainProject$ cd common
common$ ./gradlew clean build 

如果未在common/build中明确配置存储库,则此操作将失败。gradle文件。但我已经在上面的父配置中完成了,我希望子项目在可能的情况下选择父配置。

所以,热配置父项目和子项目,所以当我从子项目目录运行子项目构建时,它也考虑父配置(不仅是存储库配置,还有一些常量、依赖关系等)。


共有2个答案

隗新霁
2023-03-14

首先:不应该在每个子项目目录中安装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子项目目录中,则必须运行..//格拉德卢建造。

当从子项目目录执行构建时,Gradle将自动搜索根项目配置,如您所料:这是在初始化阶段完成的(见这里:https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:初始化)

有宏峻
2023-03-14

问题是在子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:初始化

 类似资料:
  • 是否可以设置子gradle项目的父项目。 在我的例子中,所有父子项目都位于文件层次结构中的同一级别。例如 > 代码 > /父项目 构建。格拉德尔 /child项目1 构建。格拉德尔 /子项目2 构建。格拉德尔 这里,项目1依赖于项目2,所以我将它们称为 也在我的设置中。gradle文件,我有 有了它,我可以从父项目文件夹运行任务,但单个任务不会从子项目运行。

  • 我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量。 这是我在根项目中的build.gradle文件: 这就是建筑。gradle文件子项目之一: 当我想运行构建脚本时,我得到了以下异常: 无法获取类型为org的对象的未知属性“mainClassName”。格雷德尔。应用程序编程接口。JAVA档案内部的默认舱单。 在子流

  • 我尝试设置一个JavaEE环境,用gradle构建。最后,我希望有一个EAR文件,其中包含一个EJB-Jar和某种可以部署到Glassfish的应用程序客户端(可能)。设置将是非常基本的。 目前我面临两个问题: 1)运行“耳朵”任务来组装EAR存档在tmp/耳朵中创建了一个错误的application.xml文件,如下所示: eclipse报告的错误消息是: cvc复合型。2.4.答:发现以元素“

  • 构建配置说明 开发者可以在  build.json 中配置不同的配置参数来改变项目的构建方式,具体配置参数如下: 属性 类型 默认值 描述 turnOffSourceMap boolean false 是否开启 sourceMap(目前支付宝 IDE 存在不准确的情况) constantDir string/array src/constant 静态资源(只能放在 src 目录下) disable

  • Project Structure用来配置项目和模块的各种构建参数和属性,前面我们已经介绍过了SDK Location和Project的配置,本章主要介绍模块构建的一些配置. 打开Project Structure对话框: 操作步骤: 菜单栏: File —> Project Structure 快捷键: Mac: command + ; Windows/Linux: Ctrl + Shift +

  • 主要内容:Gradle如何使用Groovy,Groovy的JDK方法,以下是纠正/补充内容:Gradle构建脚本文件用来处理两件事情:一个是项目和另一个的任务。每个生成表示一个或多个项目。一个项目表示一个JAR库或Web应用程序,也可能表示由其他项目产生的JAR文件组装的ZIP。简单地说,一个项目是由不同的任务组成。一个任务是指构建执行的一块工作。任务可能是编译一些类,创建一个,产生的或发布一些归档文件库。 注:Gradle使用Groovy语言编写脚本。 Gradle提供了一个域特定语言