
Maven是可以管理项目,管理依赖,可以自动构建项目的工具
分模块开发步骤1创建maven模块2书写模块代码3将模块打包安装到本地仓库(install指令)4在主模块添加其他模块作为依赖运行主模块(compile指令)
依赖传递(间接依赖)
可选依赖是不给用,比如我是B我依赖了A,C依赖了我,我不让C用,我就把我依赖的A隐藏起来,不给C用
而排除依赖是我不用,也就是我是C我依赖了B,B依赖了A,我不想用A,于是我就在B的依赖坐标里用exclusion排除掉A
多模块开发时如果一个被依赖的模块更新了那么其他依赖它的模块可能会有问题,
聚合可以让我们通过一个root模块(聚合工程)管理多个模块实现多个模块一起构建
步骤1.创建maven模块打包类型设置为pom(将这个maven工程设置为聚合工程) ,2.用module标签设置子模块名(相对路径)
继承概念:子工程可以继承父工程的配置信息,常见于依赖的继承
继承作用:简化配置和减少版本冲突
多个模块共同依赖的包可以配置在聚合工程中然后再继承这个聚合工程就可以进行统一依赖管理,所有模块都需要的就直接配成被继承依赖,部分模块需要用的配成可选继承依赖(dependencyManagement标签),那么子模块就在pom.xml写上继承那个父模块和哪些父模块的可选继承依赖就好了
步骤:在子工程用parent标签继承一个父亲,然后把子工程的依赖剪切到父工程(不是所有依赖都移过去,只移公用的)其实全部移过去也没关系,因为不需要的依赖多配也没关系
属性:在pom.xml中配置<properties><spring.version>5.2.10.RELEASE</spring.version><properties>
作为属性变量
然后spring依赖项的version坐标就可以写${spring.version}
属性可以被资源文件引用,步骤1配置<properties>下的<jdbc.url>
- 在jdbc.properties中写jdbc.url=${jdbc.url}
- 开启资源文件目录加载属性的过滤器
<build>
<resources>
<!--
${project.basedir}:是一个系统内置属性 当前项目所在目录,子项目继承了父项 目,相当于所有的子项目都添加了资源目录的过滤
-->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
版本管理:当我们创建工程时我们需要写上我们这个工程的版本,通常我们写1.0-SNAPSHOT等到要发布了再写RELEASE
- SNAPSHOT代表我们这个工程是正在开发没有发布的
- RELEASE代表已经开发完成发布的工程版本
多环境开发:我们现在使用的是本地数据库,但是在实际开发中我们需要多个其他数据库,那么我们就用多环境开发来解决这个问题
- 先将properties中的jdbc.ur注释掉
- 然后写profiles里面写多个profile并且每个profile中配上id和properties,再这个properties中再配上jdbc.url
- 指定环境(可以在某个profile中配上activation的activeByfault为true将这个profile设置为默认环境) (但是一般都是点右边Maven栏中的m标志指定执行maven指令mvn install -P id 来指定环境进行install)
跳过测试(了解):每次打包安装都得测试,那这个测试我们是可以跳过的
- 指令跳过:点m输入mvn 指令 -D skipTests,例如mvn install -D skipTests
- 细粒度控制跳过测试:设置maven插件的configuration
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>false</skipTests>
<!--排除掉不参与测试的内容-->
<excludes>
<exclude>**/BookServiceTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
多个模块之间是可以共享的,团队内部多台机器的这些资源共享靠的就是私服来实现
私服:一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。


(1)在没有私服的情况下,我们自己创建的服务都是安装在Maven的本地仓库中
(2)私服中也有仓库,我们要把自己的资源上传到私服,最终也是放在私服的仓库中
(3)其他人要想使用你所上传的资源,就需要从私服的仓库中获取
(4)当我们要使用的资源不是自己写的,是远程中央仓库有的第三方jar包,这个时候就需要从远程中央仓库下载,每个开发者都去远程中央仓库下速度比较慢(中央仓库服务器在国外)
(5)私服就再准备一个仓库,用来专门存储从远程中央仓库下载的第三方jar包,第一次访问没有就会去远程中央仓库下载,下次再访问就直接走私服下载
(6)前面在介绍版本管理的时候提到过有SNAPSHOT和RELEASE,如果把这两类的都放到同一个仓库,比较混乱,所以私服就把这两个种jar包放入不同的仓库
(7)上面我们已经介绍了有三种仓库,一种是存放SNAPSHOT的,一种是存放RELEASE还有一种是存放从远程仓库下载的第三方jar包,那么我们在获取资源的时候要从哪个仓库种获取呢?
(8)为了方便获取,我们将所有的仓库编成一个组,我们只需要访问仓库组去获取资源。
实践操作
一.安装私服
Nexus是一款maven私服产品,,,先安装这个私服
浏览器访问私服:http://localhost:8081/
设置用户名密码(admin和admin)
二.本地仓库访问私服配置
几个问题:
- 我们通过IDEA将开发的模块上传到私服,中间要经过本地Maven
- 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码
- 私服中的仓库很多,Maven最终要把资源上传到哪个仓库(宿主仓库)?
- Maven下载的时候,又需要携带用户名和密码到私服上找对应的仓库组进行下载,然后再给IDEA
- 上面所说的这些内容,我们需要在本地Maven的配置文件settings.xml中进行配置

步骤1:私服上配置仓库(两个宿主仓库,分别放snapshot和release)
步骤2:配置本地Maven对私服的访问权限(设置匿名访问)(还有在maven的settings中的相关配置)
步骤3:配置私服的访问路径(在maven的setting文件配置)
三.那么本地仓库和私服建立连接了,接下来就需要往私服上传资源和下载资源
步骤
在pom配置工程上传私服的具体位置
<!--配置当前工程保存在私服中的具体位置-->
<distributionManagement>
<repository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码-->
<id>itheima-release</id>
<!--release版本上传仓库的具体地址-->
<url>http://localhost:8081/repository/itheima-release/</url>
</repository>
<snapshotRepository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码-->
<id>itheima-snapshot</id>
<!--snapshot版本上传仓库的具体地址-->
<url>http://localhost:8081/repository/itheima-snapshot/</url>
</snapshotRepository>
</distributionManagement>
2.发布资源到私服(deploy)
idea中maven得写自己的配置文件路径,否则可能出错无法上传
最后说一句
如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。
