美文网首页程序员
Maven 聚合和继承

Maven 聚合和继承

作者: HikariCP | 来源:发表于2018-03-23 19:16 被阅读43次

    Maven 聚合

    <project
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
            http://maven.apache.org/maven-v4_0_0.xsd>
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.juvenxu.mvnbook.account</groupId>
            <artifact>account-aggregator</artifact>
            <version>1.0.0-SNAPSHOT</version>
            <packaging>pom</packaging>
            <name>Account Aggregator</name>
            <modules>
                <module>account-email</module>
                <module>account-persist</module>
            </modules>
    </project>
    

    pom文件作为其他pom的容器运行,在pom文件的modules标签中引入我们想要聚合的各个模块。这样就整合了多个模块。

    需要注意的是:

    • <packageing>标签在聚合情况下的打包方式必须为pom

    Maven 继承

    <project
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:shemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.juvenxu.mvnbook.account</groupId>
        <artifactId>account-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>pom</packaging>
        <name>Account Parent</name>
    </project>
    

    由于父模块只是为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java之类的文件夹了。需要注意打包类型也为pom即可。

    <project
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:shemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
        <parent>
            <groupId>com.juvenxu.mvnbook.account<groupId>
            <artifactId>account-parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <relativePath>../account-parent/pom.xml</relativePath>
        </parent
        
        <artifactId>account-email</artifactId>
        <name>Account Email</name>
        
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-spring</artifactId>
                    <version>1.2.2</version>
                </dependency> 
            </dependencies>
        </dependencyManagement>
        
        <build>
            <plugins>
                ....
            </plugins>
        </build>
    </project>
    
    • Java中的继承一样需要指定继承的配置文件地址<parent>标签

    子pom配置:

    <parent>
        <groupId>父pom所在项目的groupId</groupId>
        <artifactId>父pom所在项目的artifactId</artifactId>
        <version>父pom所在项目的版本号</version>
    </parent>
    

    dependencyManagement

    1. MavendependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。

    2. pom.xml文件中,jar的版本判断的两种途径

    • 如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactIdgroupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version

      • 所以在继承中父类的pom文件要使用dependencyManagement来承载公共依赖。为底层子pom提供公用的依赖verison。就不需要每个子类频繁声明了。有时候还可能声明的版本不一致
    • 如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jarversion声明,都以dependency里的version为准。

    如下

    pom.xml  
    //只是对版本进行管理,不会实际引入jar  
    <dependencyManagement>  
          <dependencies>  
                <dependency>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring-core</artifactId>  
                    <version>3.2.7</version>  
                </dependency>  
        </dependencies>  
    </dependencyManagement>  
      
    //会实际下载jar包  
    <dependencies>  
           <dependency>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring-core</artifactId>  
           </dependency>  
    </dependencies>
    

    相关文章

      网友评论

        本文标题:Maven 聚合和继承

        本文链接:https://www.haomeiwen.com/subject/ulaxcftx.html