高效使用Java构建工具|Maven篇|云效工程师指北

这篇具有很好参考价值的文章主要介绍了高效使用Java构建工具|Maven篇|云效工程师指北。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是胡晓宇,目前在云效主要负责Flow流水线编排、任务调度与执行引擎相关的工作。

作为一个有多年Java开发测试工具链开发经验的CRUD专家,使用过所有主流的Java构建工具,对于如何高效使用Java构建工具沉淀了一套方法。众所周知,当前最主流的Java构建工具为Maven/Gradle/Bazel,针对每一个工具,我将分别从日常工作中常见的场景问题切入,例如依赖管理、构建加速、灵活开发、高效迁移等,针对性地介绍如何高效灵活地用好这3个工具。

高效使用Java构建工具|Maven篇|云效工程师指北

Java构建工具的前世今生

在上古时代,Java的构建都在使用make,编写makefile来进行Java构建有非常多别扭与不便的地方。

紧接着Apache Ant诞生了,Ant可以灵活的定义清理编译测试打包等过程,但是由于没有依赖管理的功能,以及需要编写复杂的xml,还是存在着诸多的不便。

随后Apache Maven诞生了,Maven是一个依赖项管理和构建自动化工具,遵循着约定大于配置的规则。虽然也需要编写xml,但是对于复杂工程更加容易管理,有着标准化的工程结构,清晰的依赖管理。此外,由于Maven本质上是一个插件执行框架,也提供了一定的开放性的能力,我们可以通过Maven的插件开发,为构建构成创造一定的灵活性。

但是由于采用约定大于配置的方式,丧失了一定的灵活性,同时由于采用xml管理构建过程与依赖,随着工程的膨胀,配置管理还是会带来不小的复杂度,在这个背景下,集合了Ant与Maven各自优势的Gradle诞生了。

Gradle也是一个集合了依赖管理与构建自动化的工具。首要的他不再使用XML而是基于Groovy的DSL来描述任务串联起整个构建过程,同时也支持插件提供类似于Maven基于约定的构建。除了在构建依赖管理上的诸多优势之外,Gradle在构建速度上也更具优势,提供了强大的缓存与增量构建的能力。

除了以上Java构建工具之外,Google在2015年开源了一款强大,但上手难度较大的分布式构建工具Bazel,具有多语言、跨平台、可靠增量构建的特点,在构建上可以成倍提高构建速度,因为它只重新编译需要重新编译的文件。Bazel也提供了分布式远程构建和远程构建缓存两种方式来帮助提升构建速度。

目前业内使用Ant的人已经比较少,主要都在用Maven、Gradle和Bazel,如何真正基于这三款工具的特点发挥出他们最大的效用,是这个系列文章要帮大家解决的问题。先从Maven说起。

优雅高效地用好Maven

当我们正在维护一个Maven工程时,关注以下三个问题,可以帮助我们更好的使用Maven。

● 如何优雅的管理依赖
● 如何加速我们的构建测试过程
● 如何扩展我们自己的插件

优雅的依赖管理

在依赖管理中,有以下几个实践原则,可以帮助我们优雅高效的实现不同场景下的依赖管理。

● 在父模块中使用dependencyManagement,配置依赖
● 在子模块中使用dependencies,使用依赖
● 使用profiles,进行多环境管理

以我在日常开发中维护的一个标准的spring-boot多模块Maven工程为例。

高效使用Java构建工具|Maven篇|云效工程师指北

工程内各个module之间的依赖关系如下,通常这也是标准的 spring-boot restful api多模块工程的结构。

高效使用Java构建工具|Maven篇|云效工程师指北

便捷的依赖升级

通常我们在依赖升级的时候会遇到以下问题:

● 多个依赖关联升级
● 多个模块需要一起升级

在父模块的pom.xml中,我们配置了基础的spring-boot依赖,也配置了日志输出需要的logback依赖,可以看出,我们遵循了以下的原则:

(1)在所有子模块的父模块中的pom中配置dependencyManagement,统一管理依赖版本。在子模块中直接配置依赖,不用再纠缠于具体的版本,避免潜在的依赖版本冲突。
(2)把groupId相同的依赖,配置在一起,比如groupId为org.springframework.boot,我们配置在了一起。
(3)把groupId相同,但是需要一组依赖共同提供功能的artifactId,配置在一起,同时将版本号抽取成变量,便于后续一组功能共同的版本升级。比如spring-boot依赖的版本抽取成了spring-boot.version。

高效使用Java构建工具|Maven篇|云效工程师指北
高效使用Java构建工具|Maven篇|云效工程师指北

在子模块bu文章来源地址https://www.toymoban.com/news/detail-435280.html

到了这里,关于高效使用Java构建工具|Maven篇|云效工程师指北的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高效构建Java应用:Maven入门和进阶(二)

    2.1 梳理Maven工程GAVP属性 Maven工程相对之前的工程,多出一组gavp属性,gav需要我们在创建项目的时指定,p有默认值,后期通过配置文件修改。既然要填写的属性,我们先行了解下这组属性的含义! Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三

    2024年02月01日
    浏览(37)
  • 一、高效构建Java应用:Maven入门和进阶

    一、Maven简介和快速入门 1.1 Maven介绍 1.2 Maven主要作用理解 1.3 Maven安装和配置 二、基于IDEA的Maven工程创建 2.1梳理Maven工程GAVP属性 2.2 Idea构建Maven JavaSE工程 2.3 Idea构建Maven JavaEE工程 2.4 Maven工程项目结构说明 三、Maven核心功能依赖和构建管理 3.1 依赖管理和配置 3.2依赖传递和冲

    2024年02月08日
    浏览(30)
  • 高效构建Java应用:Maven入门和进阶(一)

    1.1 Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具( 软件 ),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基本功能 (项目构建、依赖管理) 使用就是本课程的主要目标

    2024年01月25日
    浏览(66)
  • 【Idea+Maven+Git:构建高效Java项目的强大组合】

    在当今的软件开发世界中,集成开发环境(IDE)、构建工具和版本控制系统是每个项目不可或缺的组成部分。本文将深入探讨这三个工具:IntelliJ IDEA、Maven和Git,以及它们如何协同工作,帮助开发者构建更高效、更可靠的项目。上一篇介绍了Git的分支管理策略,本文将介绍相

    2024年02月20日
    浏览(86)
  • Java开发+Intellij-idea+Maven+工程构建

    Intellij-idea是一款流行的Java集成开发环境,它支持Maven作为项目管理和构建工具。Maven可以帮助开发者自动下载项目依赖的jar包,执行编译、测试、打包等生命周期任务。本资源将介绍如何在Intellij-idea中创建、导入、转换和编译Maven工程,以及如何配置Maven的相关参数和插件。

    2024年02月01日
    浏览(70)
  • 使用Maven父工程构建spring boot子工程

    注意:子工程引入springboot相关依赖之后子工程才能被解析为springboot模块

    2024年02月11日
    浏览(32)
  • 【十年网络安全工程师整理】—100渗透测试工具使用方法介绍

     渗透测试是指渗透人员在不同的位置(比如从内网、从外网等位置)利用各种手段对 某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告, 并提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告, 可以清晰知晓系统中存在的安

    2024年02月02日
    浏览(41)
  • 提示工程师:如何高效的向ChatGPT提问对话

            最近ChatGPT真的火出圈了,现在打开知乎、博客、抖音,B站都是这方面的信息,ChatGPT相关的信息铺天盖地的袭转而来。对于这种类似新一轮信息技术革命,作为普通人的我们,该如何做呢?这是我们该思考的。         英伟达创始人兼CEO黄仁勋:this is the iph

    2023年04月12日
    浏览(77)
  • 软件测试工程师使用Jmeter工具做接口压力测试(Jmeter配置随机生成手机号)

    背景:性能测试的数据准备时很多情况需要产生一批新的数据,我们这次主要讲述的是如何产生随机的手机号,以用户注册接口为场景、生成随机手机号作为账号进行并发测试。 JMeter压力测试中设置线程组的线程数,即执行时的并发用户数,适用于单个线程组的并发测试。

    2023年04月19日
    浏览(60)
  • 如何高效实现内外网切换?是个网络工程师,都在用它

    晚上好,我是老杨。 听我网工交流群里粉丝说,这篇文章《人手一份!思科、华为、H3C交换机命名规则全收录》很干货,不知道你看过+收藏了没? 我的粉丝除了优质干货可以看,必须还有福利可以拿。今日阅读文章的粉丝福利:《浪潮之巅》高清PDF一份。 ​ 编辑切换为居

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包