高效使用Java构建工具|Maven篇|云效技术人员指北

五河娱乐新闻网 2025-11-29

● 多个基本功用并不需要一起适配

在弟基本功用的pom.xml当中,我们配备了典范的spring-boot依靠,也配备了摘要输不止并不需要的logback依靠,可以窥见,我们遵循了表列的原则上:

(1)在所有子基本功用的弟基本功用当中的pom当中配备dependencyManagement,统一政府机构依靠新版本。在子基本功用当中反之亦然配备依靠,不用再继续死对头于明确的新版本,不必要潜在的依靠新版本暴力事件。

(2)把groupId有所相同的依靠,配备在一起,比如groupId为org.springframework.boot,我们配备在了一起。

(3)把groupId有所相同,但是并不需要举例来说依靠携手提供者功用的artifactId,配备在一起,同时将新版本号取用变成变量,没多久于在此之后举例来说功用携手的新版本适配。比如spring-boot依靠的新版本取用变成了spring-boot.version。

在子基本功用build-engine-api的pom.xml当中,由于在弟pom当中配备了 dependencyManagement当中依靠的spring-boot就其依靠的新版本,因此在子基本功用的pom当中,只并不需要在dependencies当中反之亦然声明依靠,必需了依靠新版本的差异性。

合理的依靠适用范围

Maven依靠有依靠适用范围(scope)的表述,compile/provieded/runtime/test/system/import,原则上上,只按照理论上情况配备依靠的适用范围,在合理的阶段,只转用合理的依靠。

90%的Java流程员必要都用并作过org.projectlombok:lombok来标准化我们的预表述,其原理就是在校对每一次当中将注释再继续生为Java付诸。因此该依靠的scope为provided,也就是校对时并不需要,但在紧密结合不止再继续一催化反应时又并不需要被意味著。

当你的预表述并不需要用并作jdbc连接一个mysql元数据,通常我们显然会希望针对新标准 JDBC 抽象完成序列,而不是反之亦然差错的用并作 MySQL driver付诸。这个时候依靠的scope就并不需要另设为runtime。这意味着我们在校对时无法用并作该依靠,该依靠显然会被就其联在再继续一的催化反应当中,在流程再继续一指派时可以在classpath下找出它。

在子基本功用dao当中,我们有对sql完成检验的情节,并不需要转用内存元数据h2。

因此,我们将h2的scope另设为test,这样我们在检验校对和指派时可以用并作,同时不必要其不止现在再继续一的催化反应当中。

不够多关于scope的用并作,可以简介官方努力元数据。

多状况赞变成

举个非常简单的案例,当我们的服务在公有寒调动时,我们用并作了一个寒上新版本为8.0的MySQL,而当我们要完成专有寒调动时,用户提供者一个自运维的新版本为5.7的MySQL。因此,我们在相同的状况当中用并作相同的 mysql:mysql-connector-java 新版本。

类似的,在概念设计理论上的开发新每一次当中,我们经常显然会面临同一套预表述。在多套状况当中调动,存有之外依靠不相一致的情况。

关于profiles的不够多用语,可以简介官方努力元数据

依靠延时

如果你仍然在弟pom当中用并作dependencyManagement来锁定依靠新版本,大概率的,你仅仅很少显然会碰到依靠暴力事件的情况。

但是当你还是意外的看着了NoSuchMethodError,ClassNotFoundException 这两个持续性的时候,有表列两个新方法可以短时时有内的老大你延时。

(1)通过依靠统计分析找出暴力事件的依靠

(2)通过去除stdout预表述找出暴力事件的类理论上是从哪个依靠当中查找的

通过明确的逆时针当中完全相同的新版本的资讯,找出完全相同的新版本并校正。

当然这个新方法也可以纠不止一些依靠被差错的载入到classpath下,非工程概念设计本身依靠配备引起的暴力事件。

检验紧密结合每一次较慢

并作为一个开发新者,总显然会希望我们的工程概念设计无论在什么只能,指派的又快又稳,那么在Maven的用并作每一次当中,并不需要遵循表列原则上。

● 尽显然复用多线程

● 尽显然的依此紧密结合或检验

依靠流媒体较慢

通常只能,根据Maven默认 ${user.home}/.m2/settings.xml 当中的配备,匹配只能是多线程有${user.home}/.m2/repository/。

通常在紧密结合每一次当中,依靠的流媒体有时候显然会变踏入非常耗时的之外,但是通过一些非常简单的另设,我们可以有效的减小依靠的流媒体与不够新。

● 优化updatePolicy另设

updatePolicy指定了先前不够新的频率。Maven 显然会将本地 POM 的一段时时有捏(存储在存储库的 maven-metadata 邮件当中)与远程完成非常。选项包括:always(总是)、daily(每天,匹配值)、interval:X(其当中 X 是以分钟为单位的整数)、never(绝不会)。

● 用并作离线紧密结合

除此之外,如果紧密结合状况仍然存有多线程,可以用并作Maven的offline种系统完成紧密结合,不必要依靠或GUI的流媒体不够新。

清晰的,摘要当中将无法不止现类似如下Downloading就其的的资讯。

紧密结合每一次较慢

在匹配只能,Maven紧密结合的每一次并无法适当的用并作你的显卡的全部战斗能力,他显然会次序的紧密结合你的maven工程概念设计的每一个基本功用。这个时候,如果可以用并作依此紧密结合,那么将有机显然会增加紧密结合反应速度。

以上是依此紧密结合的两个号令,可以根据理论上的cpu情况来选择完全相同的号令。但是如果你找出紧密结合一段时时有并无法得到减小,那么你的maven基本功用时有显然存有类似的依靠,基本功用彼此时有只是一个非常简单的传递。

那么依此紧密结合对你来说并不适用,如果你的基本功用时有依靠人关系存有依此的显然,那么用并作上述号令完成紧密结合,才能使依此紧密结合造就效果。

检验每一次较慢

当我们先前较慢maven工程概念设计检验用例的之外,那么就只得讲到一个GUI,maven-surefire-plugin。

当你在指派mvn test的时候,匹配只能就是surefireGUI在临时工。如果我们就让在检验当中用并作依此的战斗能力,可以并作如下配备。

但是并不需要肯定不恰当的用并作依此战斗能力完成检验,反而显然带来副并作用。比如当parallel配备为methods,但是由于某些原因检验用例的指派彼此时有存有次序尽快,反而显然会不止现因为用例新方法依此指派,导致用例失败,因此也倒逼我们,如果就让获取不够快的检验反应速度,case的改写也并不需要独立且高效。

不够多关于surefireGUI的用并作,可以简介这篇元数据。

MavenGUI开发新

maven事物上是一个GUI指派框架,所有的指派每一次,都是由一个一个GUI独立完毕的。关于maven的核心GUI可以简介这篇元数据。

maven匹配为我们提供者的这些GUI比如maven-install-plugin/mvn-surefire-plugin/mvn-deploy-plugin外,还有一些三方提供者的GUI,单测占有率GUImvn-jacoco-plugin,生变成api元数据的swagger-maven-plugin等等。

在日常临时工的每一次当中,我碰到了这样一个解决办法:有个存有引人注意解决办法的sql被发布新闻到了预发布新闻状况,同时由于预发与生产用并作的是同一个db实例,由于sql的性能解决办法,制约了线上。

除了通过合理的code review准入,来不必要类似的解决办法,不够非常简单的,我们可以自己动手付诸一个预表述当中sql显影的GUI,让预表述在CI时反之亦然失败掉,数据处理的不必要此类解决办法的引发。于是我们开发新了一个mavenGUI,用并作新方法和效果如下:

在工程概念设计当中转用我们开发新并调动好的GUIcom.aliyun.yunxiao:mybatis-sql-scan。

指派表列号令,或其他就其联validate阶段指派的号令。

我们将显然会在摘要当中看着如下GUI指派的的资讯

在显影不止缺陷时,build失败,并显然会在摘要当中不止现完全相同的的资讯:

在GlobalLockMapper.java这个邮件当中,我们有一条全表显影的sql运算符显然存有风险,

同时build失败。

接下来我显然会从如何开发新这个持续性sql显影的mavenGUI入手,努力大家洞察GUI开发新的每一次。

1、创建工程概念设计

生变成的sample工程概念设计如下,

其当中MyMojo.java表述了GUI的入口付诸,

此外在根pom.xml当中可以看着,

● packaging为“maven-plugin”。

● 依靠配备当中,依靠了一些GUI开发新的典范二方库。

● GUI路由表下,依靠了maven-plugin-plugin协助我们完毕GUI的紧密结合。

2、Mojo付诸

在开始付诸我们的Mojo之前,我们并不需要继续做如下统计分析:

● GUI在maven的哪个生命期指派

● GUI在指派时并不需要哪些入口变量

● GUI指派完毕后怎么退不止

由于我们要付诸的GUI是要继续做mybatis annotation显影比如 @Update/@Select,判断到底有持续性的sql,比如到底存有全表显影的sql,到底存有全表不够新的sql等,对于此种情节下,

● 由于并不需要显影特定的程式码,并不需要知道工程概念设计程式码的所在目录,以及显影哪些邮件

● GUI显影不止持续性时,只要报错即可,不用产不止任何报告

● 希望在在此之后指派mvn validate时会有显影

那么短期内当中的GUI是这样的,

那么,

● @Mojo(name = "check") 表述了goal

● @Parameter

○ @Parameter(defaultValue = "${project}", readonly = true) 变量绑定了工程概念设计的快照 ,project.getCompileSourceRoots()没多久可以获取到源预表述的根逆时针

○ 我们表述了mapperFiles,用来专责显影哪些邮件的通配,excludeFiles用来专责意味著哪些邮件

● execute()

○ 有了以上的典范,在execute新方法当中我们没多久可以付诸完全相同的逻辑,当显影结不止持续性的sql时,跳不止MojoFailureException持续性,GUI没多久显然会失败终止。

以上,我们没多久完毕了一个GUI的基本战斗能力的开发新。

3、GUI的自带与上传

GUI开发新完毕后,我们可以通过配备distributionManagement,然后指派mvn deploy,完毕GUI的紧密结合与发布新闻。

希望通过我的引介,尽可能努力大家不够好的用并作maven,下一篇我们讲Gradle,欢迎持续注意我们。

本文为阿里寒原创明确内容,私自允许不得刊登。

河南升降平台
深圳妇科专科医院哪里好
昆明看皮肤病去哪家医院
昆明看妇科哪个医院比较好
成都甲状腺医院哪家看的好
急支糖浆有什么作用
急支糖浆的功效和作用
小孩缺钙
品牌医药
有没有什么办法可以快速止咳
相关阅读

大博医疗公布半年报 上半年获利减少43.28%

影视 2026-02-01

8月24日消息,大博医疗公开发表半年度报告。日前显示,美国公司半年度民营企业828,018,203.47元,增加值减少2.19%,归属上市美国公司上市公司的净利润179,894,580.26元

皖新传媒公布半年报 月份净利增加7.81%

资讯 2026-02-01

8月24日消息,皖新传媒发布半年度调查报告。公告看出,公司半年度营业收入5,506,103,459.65元,同比增加14.05%,归属央企入股的净利润602,230,551.31元,同比增加7

宁波富达公布半年报 年末净利减少23.37%

时尚 2026-02-01

8月24日消息,宁波富达公开发表半年度通报。暂定显示,公司半年度营业收入1,513,432,363.23元,同比增加65.95%,原属上市公司股东的财年123,031,085.56元,同比减低

长城军工定为半年报 上半年净利盈利266万

资讯 2026-02-01

8月初24日第一时间,边墙军品发布半年度年度报告。公告显示,公司半年度营业收入742,569,009.61元,同比增加47.87%,归属上市公司上市公司的净利润2,665,411.37元。

中报观察 | 弘阳服务拓宽周边地区服务赛道

资讯 2026-02-01

升。。结膜炎可以用熊

友情链接