POM之间的关系
2022-04-07 本文已影响0人
_花
image.png
可选依赖 Optional Dependencies
当一个项目A依赖另一个项目B时,项目A可能用到了项目B很少一部分功能,此时就可以在A中配置对B的可选依赖.
<project>
...
<dependencies>
<!-- declare the dependency to be set as optional -->
<dependency>
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional> <!-- value will be true or false only -->
</dependency>
</dependencies>
</project>
如果有一个新的项目C依赖A,即:Project-C <-- Project-A <-- Project-B。此时项目C就不会依赖项目B了。
如果项目C用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。
依赖排除 Dependency Exclusions
1.第一种
依赖关系为:A<–B<–C
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>${springboot.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
当然,对于多重依赖,配置也很简单只需要在最外层依赖里排除即可
2.第二种
如果我们的项目有两个依赖项:A & B,而且A和B同时依赖了C,但不是同一个版本
- 添加检查插件
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
然后运行:mvn project-info-reports:dependencies,来查看依赖项报告
- 去除依赖项
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
<exclusions>
<exclusion>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</exclusion>
</exclusions>
</dependency>
父子继承其他pom.xml配置的机制
在父项目中新建Module作为子项目
<parent>
<artifactId>collection-management-server</artifactId>
<groupId>com.baidu.aduhdmap</groupId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../ParentProject/pom.xml</relativePath>
</parent>
relativePath默认为…/pom.xml,如果路径不一样需要手动指定
dependencies 和 dependencyManagement 标签
在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。
需要注意的是:
dependencyManagement里只是声明依赖,并不实现引入。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。
如果直接在父pom文件中<dependencies>标签中写入,则无需在子组件再次写入,所有子组件共用
plugins 和 pluginmanagement
和上述关系类似