zoukankan      html  css  js  c++  java
  • 【maven】使用import scope解决maven继承(单)问题

    测试环境 maven 3.3.9

    想必大家在做SpringBoot应用的时候,都会有如下代码:

    <parent>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-parent</artifactId>  
        <version>1.3.3.RELEASE</version>  
    </parent>  
    View Code

    继承一个父模块,然后再引入相应的依赖

    假如说,我不想继承,或者我想继承多个,怎么做?

    我们知道Maven的继承和Java的继承一样,是无法实现多重继承的,如果10个、20个甚至更多模块继承自同一个模块,那么按照我们之前的做法,这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以更清晰的管理,那就不可能了,import scope依赖能解决这个问题。你可以把dependencyManagement放到单独的专门用来管理依赖的pom中,然后在需要使用依赖的模块中通过import scope依赖,就可以引入dependencyManagement。例如可以写这样一个用于依赖管理的pom:

    project>  
        <modelVersion>4.0.0</modelVersion>  
        <groupId>com.test.sample</groupId>  
        <artifactId>base-parent1</artifactId>  
        <packaging>pom</packaging>  
        <version>1.0.0-SNAPSHOT</version>  
        <dependencyManagement>  
            <dependencies>  
                <dependency>  
                    <groupId>junit</groupId>  
                    <artifactid>junit</artifactId>  
                    <version>4.8.2</version>  
                </dependency>  
                <dependency>  
                    <groupId>log4j</groupId>  
                    <artifactid>log4j</artifactId>  
                    <version>1.2.16</version>  
                </dependency>  
            </dependencies>  
        </dependencyManagement>  
    </project>  
    View Code

    然后我就可以通过非继承的方式来引入这段依赖管理配置

    dependencyManagement>  
        <dependencies>  
            <dependency>  
                <groupId>com.test.sample</groupId>  
                <artifactid>base-parent1</artifactId>  
                <version>1.0.0-SNAPSHOT</version>  
                <type>pom</type>  
                <scope>import</scope>  
            </dependency>  
        </dependencies>  
    </dependencyManagement>  
      
    <dependency>  
        <groupId>junit</groupId>  
        <artifactid>junit</artifactId>  
    </dependency>  
    <dependency>  
        <groupId>log4j</groupId>  
        <artifactid>log4j</artifactId>  
    </dependency>  
    View Code

    注意:import scope只能用在dependencyManagement里面

    这样,父模块的pom就会非常干净,由专门的packaging为pom来管理依赖,也契合的面向对象设计中的单一职责原则。此外,我们还能够创建多个这样的依赖管理pom,以更细化的方式管理依赖。这种做法与面向对象设计中使用组合而非继承也有点相似的味道。

    那么,如何用这个方法来解决SpringBoot的那个继承问题呢?

    配置如下:

    <dependencyManagement>  
        <dependencies>  
            <dependency>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-dependencies</artifactId>  
                <version>1.3.3.RELEASE</version>  
                <type>pom</type>  
                <scope>import</scope>  
            </dependency>  
        </dependencies>  
    </dependencyManagement>  
      
    <dependencies>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
        </dependency>  
    </dependencies>  
    View Code
  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/9177730.html
Copyright © 2011-2022 走看看