Gradle-01 项目自动化
1.项目自动化介绍
假老练和风车车在天府软件园的一家软件公司工作,他们正处在一个危急的时刻。到下个月底,他们需要向投资者展现产品的第一个版本,两个开发人员都是有紧追感的人,他们每天都能开发出新的特性。到目前为止,软件开发控制在规定的时间和预算之内,这让他们感到满意。首席技术官(CTO)时不时会过来拍怕他们的后背,生活非常的美好。然而,手动构建和错误构建以及整个交付的过程都严重影响项目开发速度。整个团队不得不忍受着零散的编译问题、构建不一致的软件工件和失败的部署。这就是引入构建工具的原因
1.1没有项目自动化的生活
- IDE帮我们做了这些事情:
从浏览源代码、实现新的特性、编译、重构,到运行单元测试和集成测试.当有新的代码编写出来时,就按一下“编译”按钮。如果IDE告诉你没有编译错误且测试通过时,就把代码提交到版本控制系统中,这样就可以共享代码了。IDE是一个强大的工具,但是每个人在第一次使用时都需要安装一个标准化的版本来执行所有的任务(如发现只能使用最新版本的编译器)。
- 在我的机器上可以跑
眼睛盯着滴答作响的时钟,风车车从版本控制系统中更新代码,却发现根本不能编译。似乎源代码中有一个类丢失了。它问假老练,假老练也奇怪为什么在风车车的电脑上不能编译。经过讨论后,假老练意识到他可能忘记提交某个类文件了,结果导致编译失败。团队的其它人员都由于这个原因而不能继续工作,直到假老练把丢失的文件提交上去。
- 代码的集成完全就是个灾难
该公司有多个不同的开发组,多个开发组的人员一起坐在假老练的机器前,运行编译整个应用程序,要构建一个可交付的软件,然后部署到测试环境的一个web服务器上。第一次的欢呼声很快就结束了,因为团队发现某些功能并没有像预期的那样正常工作。
- 测试过程慢的就像在爬
QA(质量保证)渴望立刻拿到应用程序的第一个版本,他们可不想测试低质量的软件。开发团队的每一次修复,他们都不得不手动地走完同样的流程。团队停止向版本控制系统中提交新的代码,一个新的版本从IDE构建出来,并且将可交付的软件拷贝到测试服务器上。每一次,一个开发人员都要全身心地投入到这项工作中,而不能给公司带来其它价值。在经过几周测试后,~~~~~~
- 部署过程变成了马拉松
从经验上看,团队知道部署一个应用的结果是不可预知的,因为存在不可预知的问题。基础设施和运行时环境必须配置好,数据库需要的测试数据必须要准备好,实际的部署需要被执行,并且需要执行初期的健康监控。当然,团队是有计划的,但是每一步都需要手动执行
现在,CTO有了一些新的想法来提高用户体验。团队决定采用敏捷开发,一种时间控制的迭代式实现和发布软件的方法。他向团队建议两周一次发布周明。假老练和风车车互相看着对方,两个人已经被预知的手动和重复工作吓到了。于是,他们两想到了一起,决定自动化实现和交付软件的每一步,以此来成少构建失败、后期集成和痛苦部署的风险。
1.2项目自动化的好处
随着技术的发展,前端和后端都要使用到构建工具有效的项目自动化是促使软件成功交付给客户的关键因素。如今,发布时间对于市场变得比以前更加重要了。能够以一种可重复、可持续的方式构建和交付软件是关键。
- 防止手动介入
手动地执行每一步去实现和交付软件是耗时且易于犯错的。我们都是人,难免会犯错,而且手动介入还会占用你真正做实际工作的时间。假老练和风车车就好比是程序的搬砖工,抱着砖就无法抱住你的女朋友,放下砖就养不活你的女朋友。这是为什么呢,正是因为没有使用自动化的构建工具,软件开发过程中的任何一步都是能够且应该被自动化。解放我们的双手,可以左手右手一个慢动作.....
- 创建可重复的构建
软件的构建通常都有预定义和有序的步骤。比如,需要先编译源代码,然后运行测试,最后组装可交付软件。你将需要每天一遍又一遍地重复运行相同的步骤。这应该和按一下按钮一样简单。无论是谁在运行该构建,构建结果应该是可重复的。
- 让构建便携
我们已经看到,能够在IDE中运行的构建是非常有限的。首先,你必须将特定的产品安装在机器上。其次,IDE也许只适用某一种操作系统。一个自动化的构建不应该依赖于特定的运行环境才能工作,无论是操作系统还是IDE。最佳方式是,自动化任务从命令行开始,它允许你在任何时间和任何一台想要运行构建的机器上。
1.3项目自动化的类型
- 按需构建
用户在自己的电脑上触发构建。使用版本控制系统来管理定义的版本和源代码文件是一种常见的作法
- 触发构建
通常是在向版本控制系统中提交代码时触发,从而得到项目健康程度的反馈。
- 预定构建
一种基于时间的程序调度方案。在特定的时间间隔或者某个具体的时间运行。
2 java构建工具
Apache Ant:一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具
Apache Maven:在Ant的基础上,提供约定优于配置的方式和无缝的依赖管理器集成。Maven的核心功能可以通过开放定制的插件来扩展
Ant和Maven的缺点:
- 使用xml作为构建逻辑的定义语言相比于其它更简明的定义语言,会导致构建脚本过于臃肿和啰嗦。
- 复杂的构建逻辑会导致又长又难以维护的构建脚本。
- Maven推荐一个默认的结构和生命周期,常常会太过限制,也许不适合你的项目需求
- 为Maven写定制的扩展过于累赘。
- Maven的早期版本会自动尝试更新它自己的核心插件。这可能会导致脆弱和不稳定的构建。
下一代构建工具——Gradle(让不可能成为可能,让可能变得简单,让简单变得优雅)
下一代构建工具的要求
- 具有表述性、声明式、可维护的构建语言
- 标准化的项目布局和生命周期,但是具有完全的灵活性和对默认值的完全可配置性。
- 拥有易用且灵活的方式去实现定制逻辑
- 支持构建由多个项目组成的项目结构
- 支持依赖管理
- 能够很好的集成和迁移现有的构建基础设施
- 强调可扩展性和高效率的构建
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
安装Gradle
首先,确保已经安装jdk 1.8或以上的版本
从gradle主页https://gradle.org/next-steps/?version=7.0&format=bin下载发布版本
配置环境变量
验证
任何构建都是从构建脚本build.gradle开始的,新增一个测试任务
task hello{ doFirst{ println("Hello World!") } }
执行 gradle -q task
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!