Maven进阶
分模块开发与设计
1.创建Maven模块将项目中的实体类拆分出来
2.书写模块代码
3.通过Maven指令安装到本地仓库(install命令)
4.导入这个模块的依赖坐标
5.测试:
通过Mavem指令compile编译一下
显示BuildSuccces
即完成domain层的分模块开发
依赖的传递性
当模块1使用了模块2的依赖坐标,而模块2导入了模块3的依赖坐标
此时模块1中不需要导入模块3的依赖坐标也能使用模块3中的内容
2.模块称为直接依赖
3模块称为间接依赖
依赖管理冲突问题
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖:不透明
隐藏当前工程所依赖的资源,隐藏后对应的资源将不具有依赖传递性
<optional>true</optional>
排除依赖:不需要
在你当前引用的坐标中将它的依赖从你的依赖坐标中去除
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
聚合
将多个模块组织成一个整体,同时进行项目构建的过称为聚合
聚合工程:通常是一个不具有业务功能的空工程(有且只有一个pom.xml文件)
作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
创建一个聚合工程
设他的打包方式为
<packaging>pom</packaging>
设置管理的模块名称
<modules>
<module>../spring_ssm1</module>
<module>../spring_ssm2</module>
</modules>
继承
概念:继承描述的是两个工程的关系,与java中的继承类似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
使用标签继承该工程下的依赖
<parent>
<groupId>com.itheima</groupId>
<artifactId>springmvc_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../springmvc_parent/pom.xml</relativePath>
</parent>
当父工程中有一个依赖,子工程不想用
可以在父工程中设置依赖管理,子工程是不会自动继承这个依赖的
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
如果子工程想用这个依赖的话(不需要填版本号)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
聚合和继承的区别:
作用:
-
聚合用于快速构建项目
-
继承用于快速配置
相同点:
-
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到一个pom文件中
-
聚合和继承均属于设计行模块,并无实际的模块内容
不同点:
-
聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
-
继承是在子模块配置关系,父模块无法感知那些子模块继承了自己
属性
定义属性(设置名称为spring.version)
<properties>
<spring.version>5.2.10RELEASE</spring.version>
</properties>
引用这个属性 ${属性名}
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
配置文件加载属性
在pom中再配置一行属性
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
<jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url>
</properties>
该属性只能在这个pom文件使用
我们必须扩大maven的控制范围
<build>
<resources>
<resource>
<directory>../spring_ssm1/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
在jdbc.properties文件中就可以使用${属性名}进行访问了
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=20020630
文件结构发生变化
如果要配置多个resource的路径
修改目录结构(${project.basedir}代表所有子项目)
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
多环境配置与应用
<!--配置多环境-->
<profiles>
<!--开发环境-->
<profile>
<id>env_dep</id>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
<!--设定是否为默认启动环境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--生产环境-->
<profile>
<id>env_pro</id>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>env_test</id>
<properties>
<jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
</properties>
</profile>
</profiles>
注意将之前配置的jdbc.url注释了
快速使用多环境开发
mvn 指令 -P 环境定义的id
跳过测试
第一种方法:点击”闪电“即可跳过test
第二种:
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
就相当于第一种方法
排除掉指定的测试
<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>
私服
私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题
启动:在安装目录中的bin目录下(D:\SoftWare\latest\nexus-3.30.1-01\bin)打开cmd,输入nexus.exe /run nexus
打开浏览器访问服务器(默认端口8081):http://localhost:8081
私服仓库分类
仓库类别 | 英文名称 | 功能 | 关联操作 |
---|---|---|---|
宿主仓库 | hosted | 保存自主研发+第三方资源 | 上传 |
代理仓库 | proxy | 代理连接中央仓库 | 下载 |
仓库组 | group | 为仓库编组简化下载操作 | 下载 |
资源的上传与下载
先创建两个仓库
在D:\SoftWare\apache-maven-3.6.1\conf\settings.xml中配置
<!-- 配置访问私服的权限 -->
<server>
<id>itheima-snapshot</id>
<username>admin</username>
<password>ylh20020630...</password>
</server>
<server>
<id>itheima-release</id>
<username>admin</username>
<password>ylh20020630...</password>
</server>
<!-- 私服的访问路径 -->
<mirror>
<id>maven-public</id>
<url>http://localhost:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
回到idea的pom.xml文件中
<!--配置当前工程保存在私服中的具体位置-->
<distributionManagement>
<repository>
<id>itheima-release</id>
<url>http://localhost:8081/repository/itheima-release/</url>
</repository>
<snapshotRepository>
<id>itheima-snapshot</id>
<url>http://localhost:8081/repository/itheima-snapshot/</url>
</snapshotRepository>
</distributionManagement>
通过点击deploy上传