一、发生冲突时以哪个为准
1、路径优先。
层级浅的优先。
A1-A2-E
B1-E
2、声明优先。
在pom.xml文件里的顺序,前面的优先。
3、特殊优先。
相同资源的不同版本。后面的覆盖前面的。(在pom.xml里的顺序)
二、<optional>标签,值为true,该依赖在maven依赖列表不可见。别人看不到我的这个依赖了。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
<optional>true</optional>
</dependency>
三、排除依赖——主动断开依赖的资源,不需要指定版本号
<dependency>
<groupId>com.niuniu</groupId>
<artifactId>niuniu-common</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
</exclusions>
</dependency>
四、依赖范围
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
<scope>compile</scope>
</dependency>
五、依赖范围的传递性
例如我有两个工程APP01和APP02。我在APP01工程中引入了APP02。APP02工程也配置使用了一些依赖以及依赖的scope。
六、生命周期与插件
例如,执行test,那从第一个到test都会被执行。
例如上图,在pom.xml里配置了生成jar包和test-jar包的插件,phase标签的值是generate-test-resources,就是在generate-test-resources阶段执行。在生命周期列表里找到generate-test-resources,是在install的上方。这样,我在执行maven install的时候,就会生成jar包和test-jar包。
七、模块聚合管理
就像是一个工程,但这个工程只有一个pom.xml文件。该pom.xml文件跟普通的pom.xml文件相比多一行
<packaging>pom</packaging>
以及
<modules>
<module>子模块名称1</module>
<module>子模块名称2</module>
</modules>