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

和上述关系类似

上一篇 下一篇

猜你喜欢

热点阅读