Maven进阶
Maven进阶
分模块开发
通过
install
指令安装模块到本地仓库导入分出去模块的坐标
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中的依赖
依赖冲突
- 通过Maven提供的依赖调解原则
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
- 通过锁定版本解决冲突问题
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
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 <optional>false</optional>
聚合和继承
聚合
聚合模块管理的打包方式 pom
设置管理的模块名称
1
2
3
4
5
6 <!--设置管理的模块名称-->
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
- 作用
使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
继承
依赖关系的继承
子工程使用父工程中的可选依赖时,无需指定版本号,由父工程提供,子工程也可以定义父工程中没有的依赖
配置
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>
两者之间的区别
- 聚合简化了构建过程,允许一次性构建多个模块
- 继承则通过父POM消除了配置重复,子模块可继承父POM的配置
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
- 一般模块的父类也是管理聚合的模块
工程版本
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>
私服
独立的服务器,解决团队间的资源共享
nexus服务器
具体实现
- mvn deploy 发布到私服上
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 XiaoYu!
评论