使用Gradle构建Monorepo项目

根据Wikipedia的说法monorepo是一种软件开发策略,其中许多项目存储在同一存储库中。 这种策略可以快速检测到因依赖关系的更改而导致的潜在问题和破坏,并且已被许多使用大型代码库的组织采用,例如Google,Facebook和Twitter。

如果碰巧将Gradle用作首选的构建工具,那么您也可以应用此策略,这要归功于3.1版中引入的Composite Builds功能(在撰写本文时,最新版本为5.0)。 让我们看一下不使用此功能时的典型monorepo工作流程。

没有复合建筑的生活

假设您刚刚在一家公司中工作,该公司的项目保存在单个存储库中。 每个项目都有一个单独的构建,并且它们之间的唯一关系是通过相互依赖来满足它们的需要。 有些项目比其他项目具有更多的依赖关系,有些项目甚至可能与其他项目没有依赖关系。

项目数量很重要; 当价格较低时,您可以说所有这些工具都可以放在一个伞项目下,就像使用Maven及其反应堆功能所做的那样。 Gradle具有类似的功能,除了在不触发所有其他项目的情况下更轻松地定位特定的构建之外。 可以这样说,Gradle的反应堆更智能,可以选择要执行的目标。

但是,当项目数量超过一打,比如说几百个时,会发生什么? 即使使用更智能的反应堆,Gradle也必须阅读所有项目的配置,然后解决适当的目标。 这肯定会花费您宝贵的日常工作时间,这是很大的禁忌。

解决方案是将每个项目分解为单独的版本。 反应堆功能已经一去不复返了,因此我们不必付出阅读和配置所有项目的代价,以后再丢弃其中的大多数项目。 但是,现在当依赖项可能引入了错误或二进制不兼容时,我们失去了做出反应的机会,这是在monorepo中组织代码的原因之一。

现在,我们必须遵循以前尝试过的

  • 在依赖项项目上进行更改。
  • 构建工件并将其发布到存储库。 大多数人都依赖快照工件。
  • 确保从属项目消耗了新发布的工件/快照。
  • 编译并运行测试以确定代码是否可以再次运行。
  • 冲洗并重复直到起作用。

这种方法的问题在于,我们浪费时间来发布中间工件,并且不时地形成表单,我们会忘记发布快照发行版,而在调试会话中花费数小时,直到我们意识到二进制文件不正确,呃。

复合材料为营救

现在让我们看看Composite Builds如何解决我们所遇到的问题。我们首先查看以下项目及其之间的依赖关系

项目1

Project2 <–取决于— Project1

Project3 <–取决于— Project2

这个小的依存关系图告诉我们,对Project1所做的任何更改都会影响Project2,进而影响到Project3,因为对Project2所做的更改也会影响Project3。 此monorepo的目录结构如下所示

.
├── project1
│   └── build.gradle
├── project2
│   └── build.gradle
└── project3
    └── build.gradle

在这里,我们可以看到三个项目及其各自的构建文件。 每个项目都有其自己的发布生命周期和版本,我们可以在其构建文件中观察到

project1 / build.gradle

apply plugin: 'java'

group   = 'com.acme'
version = '1.0.0'

project2 / build.gradle

apply plugin: 'java'

group   = 'com.acme'
version = '2.3.0'

dependencies {
    compile 'com.acme:project1:1.0.0'
}

project3 / build.gradle

apply plugin: 'java'

group   = 'com.acme'
version = '1.2.0'
  
dependencies {
    compile 'com.acme:project2:2.3.0'
}

激活“复合构建”功能需要在名为settings.gradle的文件中配置项目之间的链接。 项目2和3需要此文件,因此我们的存储库如下所示

.
├── project1
│   └── build.gradle
├── project2
│   ├── build.gradle
│   └── settings.gradle
└── project3
    ├── build.gradle
    └── settings.gradle

接下来,我们像这样写下项目之间的链接

project2 / settings.gradle

includeBuild '../project1'

project3 / settings.gradle

includeBuild '../project2'

大。 完成此设置后,我们现在可以通过发出以下命令来构建project3

$ cd project3
$ pwd
/tmp/project3
$ gradle classes
> Task :processResources
> Task :project2:processResources
> Task :project1:compileJava
> Task :project1:processResources
> Task :project1:classes
> Task :project1:jar
> Task :project2:compileJava
> Task :project2:classes
> Task :project2:jar
> Task :compileJava
> Task :classes

如您所见,project1和project2均已构建。 对project1进行更改并再次触发对project3的构建,将按预期构建所有三个项目。 现在,假设将此Monorepo扩展到数十个或数百个项目,您将很快意识到几乎不需要快照版本(如果有)。 Gradle还具有其他功能,例如输入/输出的任务缓存,这也使构建更快。 同样,最近宣布的构建缓存功能通过“捕获” CI服务器场中其他节点计算的输出来加快构建速度。

如果您喜欢本文,则可以在我的博客上找到有关Gradle和构建工具的其他有趣文章。

翻译自: https://www.javacodegeeks.com/2018/12/building-monorepo-projects-gradle.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Gradle构建Spring Boot项目之前,需要确保已经安装了Gradle和相应的Java SDK。接下来,遵循以下步骤创建项目工程: 1.首先创建一个文件夹,并在此文件夹中创建一个build.gradle文件。 2.在build.gradle文件中添加以下代码块来声明Spring Boot插件: ``` plugins { id 'org.springframework.boot' version '2.2.4.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' } ``` 3.接着添加以下代码块来声明项目的依赖: ``` dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'mysql:mysql-connector-java' } ``` 4.运行Gradle来下载和安装项目所需的依赖: ``` gradle clean build ``` 5.创建一个Spring Boot应用程序: ``` package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 6.构建并运行项目: ``` gradle bootRun ``` 以上就是使用Gradle构建Spring Boot项目工程的详细教程。这种方法可以提高开发效率,并将代码与项目依赖性集成在一起。 ### 回答2: Gradle是一款开源的自动化构建工具,是目前最为流行的Java项目自动化构建工具之一,可以帮助我们管理项目依赖、执行构建任务、自动化测试等。 Spring Boot是一个快速开发应用程序的框架,几乎可以零配置使用,可以轻松地构建Web应用程序并且支持很多种开发方式。使用Gradle构建Spring Boot项目工程,可以快速构建Spring Boot应用程序。 以下是详细步骤: 一、创建Spring Boot项目 在开始使用Gradle构建Spring Boot项目之前,首先需要创建Spring Boot项目。可以使用Spring官方提供的Spring Initializr工具来创建Spring Boot项目。 具体步骤如下: 1.访问Spring Initializr网站 https://start.spring.io/ 2.选择项目的基本配置信息,包括项目类型、项目名称、项目包名、项目版本号等。 3.选择项目依赖,例如选中Web、JPA、MySQL等依赖。 4.点击“Generate”按钮生成Spring Boot项目,将项目下载到本地电脑上。 二、配置Gradle 1.在项目根目录下创建build.gradle文件, 具体内容如下: //设置Gradle版本 buildscript { ext { springBootVersion = '2.4.1' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } //设置依赖项 apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'com.xxx.xxx'//修改为自己的工程名称 version = '0.0.1-SNAPSHOT'//工程版本号 sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java' testImplementation 'org.springframework.boot:spring-boot-starter-test' } 2.保存build.gradle文件后,在终端中执行gradle build命令即可构建项目,生成的工程目录如下: /build /classes /generated /libs /reports /resources /tmp /bootJar 三、运行Spring Boot应用程序 1.在build.gradle文件中添加以下配置信息: bootRun { sourceResources = sourceSets.main.output.resourcesDir } 2.在终端中执行gradle bootRun命令,即可运行Spring Boot应用程序,在浏览器中输入http://localhost:8080/hello进行访问。 四、打包应用程序 1.在build.gradle文件中添加以下配置信息,用于打包应用程序: bootJar { archiveName = 'app.jar'// 修改生成的文件名 } 2.在终端中执行gradle bootJar命令进行打包,生成的应用程序在工程目录下的build/libs文件夹中,即可部署到服务器上进行使用。 五、总结 通过Gradle构建Spring Boot项目,可以帮助我们更方便地管理项目依赖,执行构建任务,自动化测试等,从而提高项目开发效率和质量。希望本文对你有所帮助。 ### 回答3: 构建Spring Boot项目工程时,使用Gradle是一个较好的选择。因为Gradle是一个极其强大的构建工具,可以快速方便地构建出高效稳定的项目。下面是使用Gradle构建Spring Boot项目工程的详细教程: 第一步:创建新的Gradle项目 在创建Gradle项目时,需要确保使用Gradle版本是5.0及以上版本。 第二步:添加依赖 在构建Spring Boot项目的过程中,我们需要导入一些必要的依赖,比如web依赖。可以在build.gradle文件中添加以下内容: dependencies { compile('org.springframework.boot:spring-boot-starter-web') } 第三步:添加Spring Boot插件 可以通过在build.gradle文件中添加以下内容,来将spring-boot插件添加到项目中: plugins { id 'org.springframework.boot' version '2.6.0' } 第四步:添加源代码 src/main下新建java目录,java目录下新建包名 com.zxy.springboot ,随后在这个包下新建一个名为 SpringBootDemoApplication.java 的文件; 然后在 SpringBootDemoApplication.java 中添加如下内容: package com.zxy.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDemoApplication.class, args); } } 第五步:运行程序 在build.gradle所在目录,运行以下命令: gradle bootRun 至此,构建Spring Boot项目工程的详细教程已经介绍完毕。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值