码迷,mamicode.com
首页 > 其他好文 > 详细

maven聚合和继承

时间:2015-08-09 14:11:15      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:maven   继承   聚合   

上一篇文章学习了maven的依赖关系,并且使用maven和hibernate结合起来实现了一个简单的demo,可以看出使用maven来管理项目还是很方便的,再也不用手动的找需要的jar文件了,只需要手动的配置即可,可是大家有没有发现一个问题。

上一篇我们创建了两个工程,”user-core”,”user-dao”,但是在编译打包的时候是分别进行操作的,那么如果我有很多工程,每个工程单独来进行编译打包等操作是很麻烦的,不过可以使用maven的聚合技术进行简单的配置就可以完成这样的需求了。

maven聚合

  1. 首先创建一个user-total的工程
  2. 由于使用maven聚合只需要用到pom.xml文件中配置即可,所以删除没用的目录:”src/main/java”和”src/test/java”.
  3. 删除pom.xml中的所有依赖
    到目前为止,项目结构如下:
    技术分享
  4. 在pom.xml文件中使用modules标签来进行聚合,并且将打包方式改为pom
    pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test.user</groupId>
  <artifactId>user-total</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>user-total</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <modules>
    <module>../user-core</module>
    <module>../user-dao</module>
  </modules>
</project>

可以看到这里我聚合了user-core和user-dao这两个模块,由于这里的module的值是需要聚合的模块的名称的值,使用 “..”是因为这两个模块在当前pom.xml文件的上层目录。
需要注意的是,聚合的时候需要将该pom.xml的packaging设置为pom

此时运行user-total的pom.xml文件,输入”clean install”命令就可以将这两个模块一起编译了。

maven继承

可以看到,如果我们的user-core和user-dao这两个模块中groupId和version以及其他很多的依赖是相同的,此时我们可以利用maven提供的继承来简化。
1. 新建user-parent工程。
2. 由于user-parent工程只是用来做继承用的因此,只需要保留pom.xml文件即可。
3. 修改user-parent工程的pom.xml的packaging标签的值为pom
user-parent的pom.xml:技术分享
此时就可以在user-core中继承自user-parent了,user-core的pom.xml
技术分享

可以看到此时user-core的pom.xml却是精简了不少,凡是user-parent中存在的,在user-core中都不需要再重写了。

同时,还可以在parent工程中定义好某一个依赖的版本,version标签中引用即可,如下:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.10</junit.version>
</properties>
<dependencies>
    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
    </dependency>
</dependencies>

存在的问题
但是,这样做会存在以下问题,目前我们只有一个user-core继承自user-parent,并且将其依赖的包加入到user-parent的pom.xml文件中,那么如果user-dao依赖的所有包也加入到user-parent中,此时这两个工程就被动的互相依赖自己没有的包,这样就会导致工程冗余。
比如:
user-core依赖如下的包:
junit,hibernate,mysql
user-dao依赖如下包:
junit,log4j
此时,如果我们将这些包都这样配置到user-parent的pom.xml文件中,那么user-core和user-dao都会依赖这些包。

不过maven为我们提拱了一个dependencyManagement标签用来解决该问题。在user-parent的pom.xml文件中声明所有子工程需要依赖的包。

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.0.0.Final</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.1</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

此时user-core依赖如下包:
junit,hibernate,mysql
那么user-core的pom.xml文件中,只需要引入需要的依赖即可,并且不用写version了

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

user-dao依赖如下包:
junit,log4j
pom.xml:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
    </dependencies>

聚合和继承

大家有没有发现,聚合和继承是很相似的,packaging都是pom类型,因此我们可以将聚合放入到继承中去,此时user-parent的pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.user</groupId>
    <artifactId>user-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>../user-core</module>
        <module>../user-dao</module>
    </modules>

    <name>user-parent</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.10</junit.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.0.0.Final</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.1</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

此时user-parent的pom.xml既有聚合功能,又有继承功能。

源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

maven聚合和继承

标签:maven   继承   聚合   

原文地址:http://blog.csdn.net/mockingbirds/article/details/47374127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!