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

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

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

-
长城军工定为半年报 上半年净利盈利266万
资讯 2026-02-018月初24日第一时间,边墙军品发布半年度年度报告。公告显示,公司半年度营业收入742,569,009.61元,同比增加47.87%,归属上市公司上市公司的净利润2,665,411.37元。

-
中报观察 | 弘阳服务拓宽周边地区服务赛道
资讯 2026-02-01升。。结膜炎可以用熊