那么就设定一个模块,来管理这些模块:(变动一个,伴随着其他模块也要变动,这种形式就叫做聚合)
聚合作用:用于快速构建maven工程,一次性构建多个项目/模块。
为了实现上面这种聚合方式:
第一:我们创建一个bom项目,将项目的src删除,并且配置pom.xml的packaging和modules标签。
<?xml version="1.0" encoding="UTF-8"?><project xmlns=“http://maven.apache.org/POM/4.0.0”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.example
boss
1.0-SNAPSHOT
pom
…/java_test01
…/java_test02
…/WebAppTest01
这是我们可以看到boss工程,后面会有root表示根的意思。
完成上面,我们就可以测试了,执行以下boss的compile文件看看其他项目会不会统一执行。
这时候会发现,他们都进行了compile编译,生成了target文件:
可以看到,我们在编译或安装打包时,它是有顺序的,顺序看依赖的顺序,如果依赖非常杂乱,还需要跟pom.xml的配置有关了。
最后说一下pom.xml下的packaging标签。
该标签不设置默认是jar。
jar是java项目,war是web项目,而pom是专门用来Maven聚合的!
=========================================================================
想要做到上面的效果就要用到继承。
通过使用parent标签和dependencyManagement标签,就是父工程来统一管理子工程:
之后,我们在每一个子工程中定义parent标签,确定父工程位置。
relativePath(相对位置)标签的作用就是方便找到父类工程。
**这样,我们就可以统一管理各个项目的依赖版本了。
对于后面项目的依赖我们就不用指定版本就可以了**
除了依赖,还可以统一管理插件,使用pluginManagement标签。
总结,我们就只在父类配置好了,到了子类不用在配置版本之类的,从而达到一个依赖版本和插件版本统一的效果。
因此,这个继承就一个依赖和插件的父子工程的过程。
此外,父类的一些其他配置信息也是可以继承到子类的:
聚合和继承是可以放到一个工程中,也可以分开做两个模块,不影响。一般我都放到一个工程,这个工程也就是设计工程,不写东西,仅仅是来统一管理的。
=========================================================================
===========================================================================
这里的属性,其实和java中的变量差不多,通过修改一个属性变量,进而调用该属性的变量都会被赋予修改成的值,大体意思效果就是这样。
Maven使用properties标签来定义属性。
一般自己属性标签起名字的格式差不多像这样:
<spring.version></spring.version>
Maven 属性的分类:
-
自定义属性
-
内置属性
-
Setting属性
-
Java系统属性
-
环境变量属性
自定义属性:
自定义属性是用的最多的,等同于java中的变量,方便统一维护。
内置属性:
其实在maven项目中,就有很多内置的属性。
${version}属性:就是调用当前工程的version。
${basedir}属性:获取项目根目录路径。
其实它们前面是有个project,project是可以省略的。
Setting属性:
使用maven配置文件setting.xml中的标签属性,用于动态配置。
例如:${settings.localRepository}
Java系统属性和环境变量属性:
读取Java系统属性:
例如:${user.home}
当然还有系统查询的方式:
例如:mvn help:system
通过mvn help:system命令,得到两种属性:系统属性和环境变量属性。
下面这个就是系统属性:
环境变量属性:
例如:${env.JAVA_HOME}
===========================================================================
SNAPSHOT(快照版本):
-
快照版本就算是测试阶段的版本。
-
快照版本会随着开发的进展不断更新。
RELEASE(发布版本):
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本成为发布版本。
上面这两种是比较常用的,也有些企业起的名字不同,有rc,m等等一系列,这倒不用在意。
工程版本号的约定:
=================================================================================
我们设置jdbc的一些信息时,常存储在jdbc.properties里面:
但是我们想也让这里面的值,使用属性值来代替,也是可以的(也就是想让外部文件也使用当前pom.xml设置的属性值):
这就分为:配置资源文件对应的属性和测试资源对应的属性,也就是main下的resources和test下的resources。
配置资源文件对应的属性(使用resources标签):
第一步:我们设定好属性值:
第二步:在build标签内设定resources标签,负责指定文件路径目录:
filtering属性作用:开启加载pom属性过滤功能,就是设置为true才能被加载到。
最后,我们install一下,在jar包中查看jdbc.properties是否配置成功了。
最后,我们可以通过内置属性,来修改一下:
配置测试资源的对应信息(使用testResources):
其实本质上没啥区别,就是标签换成了testResources 和 testResource,注意路径要改成test,仅此而已。
=====================================================================================
我们所建成的项目,在当前能够运行成功,但如果放置到服务器上就有可能环境不兼容等,换句话说,每次放到新服务器都要配置一下环境值等等。
定义这种多环境开发,Maven也是可能做的,还是去聚合工程配置pom.xml文件。
光配置好肯定不行,我们在运行时,还要指定我们运行哪一个环境的id,因此执行命令的时候需要我们,添加参数!
因此,我们执行mvn指令时,要添加-p:
例如:mvn install -P [指定的环境id]
上面还可以通过使用 activation 和 activeByDefault 默认方式来启动环境配置:
===========================================================================
真正开发中,测试是不能跳过的!
在某些特殊情况下,我们通过跳过来检查那一部分出现问题或者来节约时间等等。
方案一:
idea的跳过测试:
方案二:
通过命令来跳过测试环节:
mvn install -D skipTests
-D的作用是指定Java全局属性。
方案三:(针对插件而言)
我们设置插件后,可以在configuration标签内设置skipTests标签,来决定该插件测试时跳不跳过。
对于插件而言,我们想要哪一个测试,哪一个不需要测试,也是可以直接来定义的如下:
================================================================================
私服有很多,不过现在比较常用的是nexus私服,平时我们打的游戏也是有私服区分的。
私服在开发中很重要!
平时我们下载插件jar包等等都是直接在中央Maven仓库下载,那是公共的。
如果我们开发项目中,每一个负责的工程模块不同,需要彼此模块时,总不能通过u盘拷贝,飞秋发送啥的来操作。这个时候就需要私服,我们将项目打包到私服,谁用,谁拿,一样原理。
私服和中央仓库是分离开的!
nexus 私服服务器下载地址:
https://help.sonatype.com/repomanager3/product-information/download
解压后,有两个目录分别对应如下:
启动配置如下:
执行 nexus /run nexus命令:
启动后,看到如下图片,我们就可以去http://localhost:8081网页下查看了。
http://localhost:8081/ 网页如下,看到当前页面表示我们启动成功了:
如果我们想要修稿一些nexus基础配置信息,如端口地址等等,需要去etc下修改nexus-default.properties文件中的内容:
还有一个nexus服务器启动对应的配置信息,在bin/目录下的nexus.vmoptions文件中配置。
9.2.1 仓库分类
私服有多种类型的仓库,分别对应不同的作用。
对应上图的三个不同类型的仓库:宿主仓库hosted,代理仓库proxy和仓库组group。
宿主仓库hosted:
-
保存无法从中央仓库获取的资源,如自主研发的项目,第三方非开源项目(例如:oracle , 因为第三方非开源在maven中央仓库是找不到的!)
-
宿主仓库就是上面在仓库组中的仓库。
代理仓库proxy:
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
BAT面试经验
实战系列:Spring全家桶+Redis等
其他相关的电子书:源码+调优
面试真题:
hadow_50,text_Q1NETiBASVRfSG9sbWVz,size_20,color_FFFFFF,t_70,g_se,x_16)
对应上图的三个不同类型的仓库:宿主仓库hosted,代理仓库proxy和仓库组group。
宿主仓库hosted:
-
保存无法从中央仓库获取的资源,如自主研发的项目,第三方非开源项目(例如:oracle , 因为第三方非开源在maven中央仓库是找不到的!)
-
宿主仓库就是上面在仓库组中的仓库。
代理仓库proxy:
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
[外链图片转存中…(img-7VIjmElz-1718710334289)]
BAT面试经验
实战系列:Spring全家桶+Redis等
[外链图片转存中…(img-SyTV3c1Y-1718710334290)]
其他相关的电子书:源码+调优
[外链图片转存中…(img-9Ee7qQ13-1718710334290)]
面试真题:
[外链图片转存中…(img-SpS3OZTV-1718710334291)]
[外链图片转存中…(img-7YypXX5T-1718710334291)]