Maven进阶

分模块开发

  1. 通过install指令安装模块到本地仓库

  2. 导入分出去模块的坐标

1
2
3
4
5
6
<!--      依赖domain运行 j 跟加入jar包一样-->
<dependency>
<groupId>org.example</groupId>
<artifactId>Maven_1</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

依赖

依赖管理

1
2
3
4
5
6
<!--设置管理的模块名称-->
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>

依赖传递

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系

A->B,B直接引用A中的依赖

  • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

A->B->C,C可以用A中的依赖

依赖冲突

  1. 通过Maven提供的依赖调解原则
  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
  1. 通过锁定版本解决冲突问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--抽取版本号, 以后修改方便-->
<properties>
<spring.version>5.1.7.RELEASE</spring.version>
</properties>

<!--锁定jar包版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
  1. 排除依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--依赖dao运行-->
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven_04_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖是隐藏当前资源对应的依赖关系-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>

可选依赖

  1. 不透明
1
<optional>false</optional>

聚合和继承

聚合

  1. 聚合模块管理的打包方式 pom

  2. 设置管理的模块名称

1
2
3
4
5
6
<!--设置管理的模块名称-->
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
  1. 作用

使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建

继承

  1. 依赖关系的继承

  2. 子工程使用父工程中的可选依赖时,无需指定版本号,由父工程提供,子工程也可以定义父工程中没有的依赖

  3. 配置

1
2
3
4
5
6
7
<!--配置当前工程继承自parent工程-->
<parent>
<groupId>com.itheima</groupId>
<artifactId>maven_01_parent</artifactId>
<version>1.0-RELEASE</version>
<relativePath>../maven_01_parent/pom.xml</relativePath>
</parent>

两者之间的区别

  1. 聚合简化了构建过程,允许一次性构建多个模块
  2. 继承则通过父POM消除了配置重复,子模块可继承父POM的配置
  3. 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
  4. 聚合与继承均属于设计型模块,并无实际的模块内容
  5. 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的块有哪些
  6. 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
  7. 一般模块的父类也是管理聚合的模块

工程版本

SNAPSHOT(快照版本)
项目开发过程中临时输出的版本,称为快照版本快照版本会随着开发的进展不断更新
RELEASE(发布版本)
项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

多环境开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!--配置多环境 在父工程中配置-->
<profiles>
<!--开发环境-->
<profile>
<id>env_dep</id>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.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>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<build>
<resources>
<!--设置资源目录,并设置能够解析${}-->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<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. 独立的服务器,解决团队间的资源共享

  2. nexus服务器

  3. 具体实现

  1. mvn deploy 发布到私服上