Maven 高级
# Maven 高级
# 分模块开发与设计
- 将与当前层无关的内容清除掉
- 在 pom.xml 将另外层的导入坐标
- compile 预编译一下 是否出错
- 然后 install 打包成坐标

# 聚合
当一个工程构建 其他分模块的工程都会跟随着构建
在主工程管理 中的 pom.xml
<!-- 定义该工程用于进行构建管理-->
<packaging>pom</packaging>
<!-- 管理工程的列表-->
<modules>
<!-- 具体的工程名称-->
<module>../ssm_dao</module>
<module>../ssm_pojo</module>
<module>../ssm_service</module>
<module>../ssm_controller</module>
</modules>
2
3
4
5
6
7
8
9
10
11
# 继承
Maven 使用 dependencyManagement 元素来提供了一种管理依赖版本号的方式。
通常会在一个组织或者项目的最顶层的父 POM 中看到 dependencyManagement 元素。
使用 pom.xml 中的 dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。
Maven 会沿着父子层次向上走,直到找到一个拥有 dependencyManagement 元素的项目,然后它就会使用这个
dependencyManagement 元素中指定的版本号。
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,优势:
- 这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;
- 另外如果某个子项目需要另外的一个版本,只需要声明 version 就可
dependencyManagement 里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
如果不在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项并且没有指定具体版本,才会从父项目中继承该项 且 version 和 scope 都读取自父 pom;
如果子项目中指定了版本号,那么会使用子项目中指定的 jar 版本
在父工程中 定义 声明依赖
<dependencyManagement>
<!-- 所有的依赖包-->
<dependencies>
</dependencies>
</dependencyManagement>
2
3
4
5
6
插件继承
<pluginManagement>
<plugins></plugins>
</pluginManagement>
2
3
在子工程的 pom 中定义父工程
<parent>
<groupId>com.itheima</groupId>
<artifactId>springmvc_validator</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 父工程的pom文件-->
<relativePath>../ssm/pom.xml</relativePath>
</parent>
2
3
4
5
6
7
在子工程所有的依赖只有父工程有的 都可以不写版本号
# 属性
定义属性
<!-- 定义属性-->
<properties>
<!-- 标签名为属性名 值为属性值-->
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
2
3
4
5
使用属性
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!-- 使用${属性名} 来获取值-->
<version>${spring.version}</version>
</dependency>
2
3
4
5
6
${version} 是 maven 内部提供的 当前 pom 工程的版本号 我们在继承
# 版本管理
- snapshot (快照版本)
- release (发布版本)
# 资源文件
在 POM 外的资源文件中使用定义好的属性值
定义属性
<!-- 定义属性-->
<properties>
<!-- 标签名为属性名 值为属性值-->
<jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url>
</properties>
2
3
4
5
开启资源配置加载 如果是 test 测试目录下的资源文件在 <resource> 包含在内的标签前面都加上 test
<build>
<resource>
<!-- 资源文件的路径-->
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
2
3
4
5
6
7
8
在资源文件中引用
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
2
3
4
# 多环境开发
不同环境使用定义好的多个属性值
<!--创建多环境-->
<profiles>
<profile>
<!-- 定义环境对应的唯一名称-->
<id>pro_eny</id>
<!--定义环境中专用的属性值-->
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url>
</properties>
<!-- 默认环境 true为默认-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>dep_env</id>
<properties>
<jdbc.url>jdbc:mysql://localhost:3307/ssm_db</jdbc.url>
</properties>
</profile>
</profiles>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
使用环境
mvn install -P 对应环境 id
mvn install -P dep_env
# 跳过测试
- 在 IDE 的 Maven 中 把 test 跳过
- 命令行 mvm install -D skipTests

# 私服
Nexus
https://help.sonatype.com/repomanager3/download
运行 bin 下的 nexus
nexus /run nexus
启动完成后 localhost:8081
# 私服资源获取

# 资源发布

或者 IDA 中 maven 的 deploy
id 对应本地的 maven 对应 servers 的 username 和 password