10x 程序员工作法
郑晔
开源项目 Moco 作者
53432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 63 讲
思考框架 (1讲)
10x 程序员工作法
15
15
1.0x
00:00/00:00
登录|注册

30 | 一个好的项目自动化应该是什么样子的?

分享自动化工作的过程
将工作过程自动化
项目构建脚本的内容
持续集成的基础
项目自动化过程
运行应用
执行构建命令
生成构建产物
执行数据库迁移命令
添加数据库迁移文件
基本配置
使用 Flyway
JaCoCo
CheckStyle
check 任务
目录结构
模块划分
Gradle 配置文件
用 Gradle 命令生成 IDEA 工程
使用 IntelliJ IDEA 打开项目
项目 clone
功能简介
ThoughtWorks 将 Maven 放到了暂缓(HOLD)里面
持续集成、持续交付的兴起
Maven 不够灵活
选择 Gradle 作为构建工具
使用 Spring Boot 作为基础框架
构建脚本是项目准备的重要组成部分
从程序员的日常工作开始
总结时刻
构建应用
数据库迁移
检查
初见项目
基础准备
项目示例
为什么用 Gradle 而不是 Maven
以一个典型的 Java REST 服务为例
介绍
一个好的项目自动化应该是什么样子的?

该思维导图由 AI 生成,仅供参考

你好,我是郑晔。
进入自动化这个模块,我准备从程序员的日常工作开始。介绍“迭代 0”时,我提到构建脚本是项目准备的一个重要组成部分,但在那一讲中,我并没有具体说构建脚本长成什么样。
今天,我们以一个典型的 Java REST 服务为例,介绍一下最基本的构建脚本应该做到什么样子。这里我采用的 Java 技术中最为常见的 Spring Boot 作为基础框架,而构建工具,我选择了 Gradle
估计很多 Java 程序员心中的第一个问题就是,为什么用 Gradle,而不是 Maven?Maven 明明是 Java 社区最经典的构建工具。答案是因为 Maven 不够灵活。
你可以回想一下,你有多少次用 Maven 实现过特定需求?估计大部分人的答案都是没有。随着持续集成、持续交付的兴起,构建脚本的订制能力会变得越来越重要,Maven 则表现得力有不逮。
其实,早在 2012 年,ThoughtWorks 技术雷达就将 Maven 放到了 暂缓(HOLD)里面,也就是说,能不用就不用。
为了配合这次的讲解,我写了一个 Demo,放在了 Github 上。它的功能非常简单:
通过向 /users POST 一个请求,实现用户注册;
访问 /users,查看已注册的用户。
如果方便的话,你最好把这个项目 clone 下来,以便参考。这里我主要是讲解自动化要做成什么样子,如果你想了解具体是怎么实现的,可以参考 Demo 里的代码。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用Gradle构建一个典型的Java REST服务,并探讨了自动化项目的基本要求。作者首先介绍了为什么选择Gradle而不是Maven,强调了Gradle的灵活性和定制能力。接着,作者通过一个简单的Demo项目展示了如何使用Gradle进行基础准备和初见项目,包括IDE的选择、项目的分模块和目录结构的组织。在自动化过程中,作者强调了检查的重要性,并介绍了如何使用CheckStyle和JaCoCo进行代码风格检查和测试覆盖率检查。此外,文章还介绍了数据库迁移工具Flyway的使用,包括配置和添加数据库迁移文件的步骤。通过这些内容,读者可以了解到一个好的项目自动化应该具备的基本要素,以及如何使用Gradle和相关工具来实现自动化。 文章总结了一个基本的项目自动化过程,包括生成IDE工程、编译、打包、运行测试、代码风格检查、测试覆盖率、数据库迁移和运行应用。强调了自动化工作的重要性,指出几乎每个重复或繁琐的工作都应该自动化。同时,强调了基础设施和工具的进步,使自动化工作变得更加容易。最后,鼓励读者将工作过程自动化,并提到了持续集成的基础。整体而言,本文为读者提供了关于项目自动化的基本要求和实现方法,强调了自动化工作的重要性和现代工具的便利性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《10x 程序员工作法》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • 西西弗与卡夫卡
    设想过这样的情景(还没实现,打算实践一把):我们新招一名比较熟练的程序员,从TA入职拿到机器,到开发示意代码,再提交SCM,然后CI/CD,再发布到线上交付给用户,整个过程可以在入职当天的午饭之前完成。 这不光要求构建和集成自动化,甚至要求从入职开始的各个环节都能提前准备好,包括机器、开发环境、线上环境等,甚至连示范的需求都要能及时传递给TA。理想情况下,程序员只需要开发好程序,保证质量,提交到SCM即可,其他事情都应该交给机器。 要知道程序员都很贵,越早给用户交付价值越好

    作者回复: 是这个意思,后面继续谈如何往线上送。

    2019-03-20
    2
    23
  • helloworld
    对于Gradle的特性了解还是比较少……感觉学习中会有这样的一个现象:对与技术是干什么用的其实是知道的,但是对于细节的把握总是容易遗忘,之前就拿实战Gradle这本书基本上通读了一遍,但是遗忘的确实有点快!我感觉这应该是大多数程序员的通病吧,老师能否给出一些建议?抑或是这种学习方式本身就是低效或者是错误的,谢谢

    作者回复: 我的学习方式是,我先要知道构建脚本要做哪些事情,就像这篇文章中写到的这些内容,然后看怎么样用对应工具如何完成,这样看起手册来就有针对性了。

    2019-05-03
    12
  • enjoylearning
    作为一个.net开发人员又看到了一堆java术语,哈哈,不过没关系,不就是配个java 环境么,easy

    作者回复: 就喜欢你这种 enjoy learning 的感觉!

    2019-03-27
    9
  • 人月聊IT
    老师,我有个疑问。公司最近有个技术老大说不准用lombok这个小工具,一定要我们手写set get?lombok真的那么差吗?

    作者回复: 我不清楚具体的情况。我凭一般认知回答一下,有一种可能是,你老大觉得 getter/setter 就不应该写,需要做更好的领域建模;另一种情况是,对于这种生成代码的机制有担心。lombok 本身不是问题,很多人乱用才是问题。

    2019-03-23
    8
  • 0xABC
    郑老师是否可以分享一下自己在模块划分上面的经验呢?

    作者回复: 《敏捷软件开发:原则、实践与模式》、《架构整洁之道》中都有关于模块划分的内容。

    2019-03-20
    7
  • hua168
    idea没有直接集成gradle吧?我看maven就直接有,好不容易学完maven,就淘汰了😂 有gradle方面的书吗?idea方面的呢?看官方教程? idea是不是用到什么功能再学?还是先看过大概,用到再仔细看?还是最好都看一遍? 目前idea只会一些基础的…

    作者回复: 理解错了,IDEA 提供了很好的 Gradle 支持。我的建议是生成 IDE 工程,maven 同样适用。 我学 Gradle 和 IDEA 这种工具都是看官方文档。 IDEA 的学习,别的不说,先熟练适用快捷键。

    2019-03-20
    5
  • 0xABC
    老师,有个细节问题想咨询一下,现在用Spring boot做一个新项目,由于是前期阶段,短时间内要上线,选择了Spring boot,用业务划分模块的方式来进行开发,就像您文中提到划分模块,现在有个疑问的地方是模块之间会产生一些调用,比如用户的金币数据在用户模块里,游戏模块需要用到某个用户的金币数据,有比较好的做法吗?如果是让游戏模块依赖用户模块,然后注入用户的service,感觉跟之前没什么区别

    作者回复: 不要直接依赖于服务,要用接口的方式进行隔离,哪怕是接口和原来服务一模一样,也要隔离。必须明确的一点,这两个业务模块之间是服务相互调用的关系,不是程序库的关系。

    2019-04-23
    3
    4
  • 孤星可
    我一般会在需要专有的构建工具之上 再定义一个 Makrfile 封装 通用的 test build deploy 操作 统一各语言构建工具差异 比如 maven gradle npm

    作者回复: 我也做过类似的事情,用 shell 脚本去封装。

    2019-03-20
    4
  • 大力
    老师之前的文章都是只讲方法论,本篇也有放上具体代码了,要开IDE试试!

    作者回复: 赶紧体会一下代码的感觉!

    2019-03-24
    3
  • 0xABC
    自动化在持续交付中得到了非常充分的体现,把频繁的打包、单测、集成测试、部分验收测试、镜像构建和发布、CI环境更新、服务可用性验证等过程全部流水线化,极大的提升了构建发布效率,当然自动化的意义不仅于此;同时,把一切自动化是思维的转变,高效工作的有利工具。

    作者回复: 没错,我们下面就会谈到持续交付。

    2019-03-20
    3
收起评论
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部