maven之聚合/继承
来源:互联网 发布:我的世界手机版龙珠js 编辑:程序博客网 时间:2024/05/24 07:08
1 聚合
一般项目中包含很多个模块,而每个模块就可以当作一个maven项目,那么每个模块聚合来完成一个大的项目呢?maven就实现了这个功能。例如在《maven实战》中实现的一个账户注册服务,它包含account-email,account-persis等五个模块,需要将这五个模块聚合在一起以实现用户账户注册服务。
以下对account-email,account-persis两个模块的聚合进行说明:
1.1 创建一个名为account-aggregator模块,这个模块本身就是一个maven项目,它也需要有一个pom.xml文件,内容如下:
<span style="font-family:Microsoft YaHei;"><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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.juvenxu.mvnbook.account</groupId><artifactId>account-aggregator</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><name>Account Aggregator</name><modules><module>account-email</module><module>account-persist</module></modules></project></span>
<packaging>元素表示打包方式,对于聚合模块,打包方式一定是pom;<modules>元素表示聚合的模块集合,一个<module>元素代表一个模块,它的值就是要模块的artfactId,同是要注意各个模块文件的关系如下:
<module>元素的值也指示了聚合模块与被聚合模块的位置关系,如果<module>元素值如下:
<modules><module><span style="font-family:Microsoft YaHei;">../</span>account-email</module><module>../account-persist</module></modules>此时,各个模块文件之间位置的关系:
2 继承
根据经验,一个项目的各个模块中不可避免重复使用各种依赖和插件,这些都是在各自模块中的pom.xml文件中进行配置,如果模块很多的话,这样的做法无疑加大了程序员的工作量,同时很容易出现错误,例如版本的设置等。maven当然想到了这种情况,所以maven提供了继承功能。
2.1 继承一般步骤
2.1.1 创建一个account-parent模块,该模块也可以作为一个maven项目,建立一个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/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>2.1.2 修改需要继承上模块的子模块的pom.xml文件,如修改account-email中的pom.xml文件:
<pre name="code" class="html"><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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><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><dependencies><span style="font-family:Microsoft YaHei;">...</span></dependencies><build></build></project>在子模块中通过<relativePath>元素的值来指明子模块与父模块的(文件)关系:
2.1.3 最后需要注意的是新生成的account-parent模块需要配置到account-aggregator的pom.xml中的<modules>中,如下:
<modules><module>account-email</module><module>account-persist</module><module>account-parent</module></modules>
2.2 继承之依赖继承
项目中最常用的应该就是依赖继承了吧,在父模块的pom.xml文件中的<dependencyManagement>元素来定义,然后在子模块的pom.xml中通过<dependencies>元素来确定继承关系。
2.2.1 父模块的pom.xml中<dependencyManagement>元素内容:
<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>2.2.2 子模块account-email的pom.xml中<dependencies>元素内容:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>${javax.mail.version}</version></dependency><dependency><groupId>com.icegreen</groupId><artifactId>greenmail</artifactId><version>${greenmail.version}</version><scope>test</scope></dependency></dependencies>2.2.3 可以看出,account-email中继承了account-parent中的五个依赖,子模块的pom.xml中<dependencies>元素相比父模块的pom.xml中<dependencyManagement>元素的内容,少了version,scope等,只剩下groupId和artfactId的配置,其他的元素都继承父模块。其他没有继承父模块的依赖就必须配置version等,例如上面的greenmail。
这样机制貌似没有减少太多内容,但是为什么还是会用这种机制呢?父模块中的<dependencyManagement>元素能改指定其下所有子模块依赖的版本,防止出现多个子模块使用依赖版本不同的情况。
同时,如果子模块不需要全部继承父模块中的依赖是,只需要在子模块的pom.xml中的<dependencies>元素中不配置出来就搞定。
2.3 继承之插件继承
除了依赖继承,插件继承也使用的比较多,在父模块的pom.xml文件中的<pluginManagement>元素来定义,然后在子模块的pom.xml中通过<plugins>元素来确定继承关系。
2.3.1父模块的pom.xml中<pluginManagement>元素内容:
<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins></pluginManagement></build>2.3.2 子模块的pom.xml中<plugins>元素内容:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId></plugin></plugins></build>2.3.3 和依赖继承类似,不在说明。
3 聚合和继承的关系
对于聚合模块,它知道有哪些被聚合的模块,但是被聚合的模块不知道这个聚合步骤;对于继承,父模块不知道被哪些子模块继承,但是子模块都必须知道自己的父模块。
在现实项目中,一般一个pom既可以聚合pom,又可以是父pom,例如,可以将account-aggregator和account-parent合并在一个新的account-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/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><modules><module>account-email</module><module>account-persist</module></modules><properties><springframework.version>2.5.6</springframework.version><junit.version>4.7</junit.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${springframework.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins></pluginManagement></build></project>
- maven之聚合/继承
- maven之继承、聚合、依赖
- maven之继承、聚合、依赖
- maven之聚合与继承
- Maven之继承与聚合
- Maven详解之聚合与继承
- Maven之——聚合与继承
- [150826]Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven之依赖,聚合和继承
- Maven详解之聚合与继承
- android Apk反编译教程
- HDU4932 - Miaomiao's Geometry(贪心)
- 线段树为什么要开4倍空间
- Apache2.2多域名虚拟主机配置
- maven和eclipse搭建
- maven之聚合/继承
- 正则表达式基本语法及使用
- A Game with Colored Balls
- java爬虫技术
- PHP函数补完:stream_context_create()模拟POST/GET
- hdu3338 / 方格横纵和问题终极版,最大流斩
- linux usb系统
- work_weipa_listview下拉刷新
- C# WINFORM Excel 导入导出 类