前序
- 分模块开发的意义
将一个项目中的若干模块,拆分出来,成为一个单独的模块。
将domain模块从项目中拆分了出来
- 拆分后,在主项目中,通过坐标依赖,导入子模块(坐标在子模块的pom.xml中,复制过来)
<depency>
<groudId>com.itheima</groupId>
<artifactId>maven_03_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</depency>
- 把domain拆分的子模块打包进仓库 这样pom.xml中为什么可以直接使用坐标就是对的?因为在maven本地仓库中,帮我们安装了,所以后续直接导入坐标就可以使用。
所以在本地仓库中,需要有我domain中的资源坐标。
双击进行打包
- 然后就可以在主项目中随便使用子模块的数据,不报错。
- 注意:有的子模块又依赖其他的子模块,需要将其他的子模块的坐标导入进来!!!
依赖传递
这些就被称为是:依赖;
我们发现有的依赖有箭头,有的没有箭头;有箭头的表示:这个依赖又同时依赖了其他的依赖;
直接依赖:我这个依赖用到了其他的依赖,而其他的依赖又用了其他的依赖,这个时候,我的依赖就是【直接依赖(pom.xml中直接使用的)】:可以把他们全部使用
间接依赖:其实我不直接用它,我用多个间接依赖合成的【直接依赖】
谁的度小,谁的优先级 就高;
谁的配置顺序在前面,谁就更优先;
通过这个按钮,可以查看具体的依赖关系
可选依赖和排除依赖
防止依赖有冲突问题,我就想把某些特殊的依赖进行【隐藏】也就是可选依赖
知道即可
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本
通过<exclusions>来排除依赖,里面写上坐标就行
如果你用别人的东西,那么一定是排除依赖
如果你的东西被别人用,那么一定是可选依赖;
聚合
默认打包方式:jar
web工程打包方式:war
聚合工程的打包方式:pom
-
设置打包方式
-
设置管理的模块名称 两个点:.. :表示上一次目录结构;
一个点: . :表示当前目录结构;
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
以上是:设置当前工程,维护管理的模块,到底有几个
- 在maven中通过compile来运行。
就算我的module管理的顺序不一样,但是输出还是一样的。
因为他是通过依赖的关系顺序 来判断谁先执行的。
先把没有依赖的构建,然后再构建有依赖的。
继承
将相同的依赖,进行继承、简化操作。
- 聚合和继承通常在一起,继承关系在子类中描述 pom.xml02
<parent>
//父类的坐标
<groupId></groupId>
<artifactId>maven_01_parent</artifactId>
<version>1.0-SNAPSHOT</version>
//还需要通过一个标签,来快速找到继承的资源
<relativePath>../maven_01_parent/pom.xml</relativePath>
</parent>
- 父工程配置 子工程中用到的依赖
- 依赖管理(不强制子工程继承的东西)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
如果我想用,需要指定使用(pom2.xml)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
只需要提供群组id和项目id,不需要提供版本,版本由父工程统一提供,避免版本冲突;子工程还可以定义父工程中没有定义的依赖关系。
聚合与继承的区别
聚合:在父工程中配置
继承:在子工程中配置
属性
定义属性
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
再次使用的时候:
只需要在定义属性的地方,进行版本的修改,就可以了。大大地减少了耦合性。
可以定义的属性非常的多:
配置文件加载属性
- 在pom.xml中配置jdbc.properties中的数据
如果直接在pom.xml中设置,只能在pom.xml中用,不能再配置文件中用。
- 需要扩大范围(jdbc.properties在pom2.xml,pom2.xml中的jdbc需要用到简写形式,所以这里directory要写到pom2的地址)
<directory>资源文件是什么</directory>
<filtering>开启过滤规则true</filtering>
- install一下
补充
如果有多个jdbc.properties也想要用这种简写的方式怎么办呢?
而且directory标签只能写一次
改进:${project.basedir}:代表当前所在的目录,因为子项目继承了父项目,所以子项目也在当前所在目录。
当我们打包方式为:war(web项目)的时候,没有web.xml是会报错的。
需要通过插件来解决
Maven内置属性
版本管理
多环境配置与应用
不同的环境配置,需要有不同的地址。
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境。
- 第一种方式
然后再install
- 第二种方式【更常用】 直接通过命令来选择哪一个环境。
这个是执行mvn指令
-P代表:指定环境,后面代表环境id
mvn install -P env_test
跳过测试
- 点击闪电按钮,然后再install运行,就会直接跳过测试
- 指定跳过某些测试 测试是一个插件,我们只能在插件上进行修改操作
本质上是需要测试(skitTests是否跳过=false:不跳过=需要测试),然后通过排除需要测试的类
- 指令
mvn package -D skipTests跳过测试
私服
什么是私服
如果不在一台电脑,怎么把模块共享出去?难道是u盘吗?那肯定不是!