一起学Maven(Maven聚合和继承)<四>
2016-07-29 00:00
429 查看
前情回顾
在上一章节中,通过三个模块的项目开发,讲解了Maven依赖管理的特性,从而对Maven依赖的表现,范围等有着一定的认识,但每次对一个模块进行更改,都要将对应模块进行test或者package或者install的操作后,使用到该模块的项目才可以使用,这样的操作有些繁琐,如果有过多的模块,那将需要执行多次的操作,还有,在每个模块pom.xml文件中,存在很多之前模块相同的依赖包,并且以后开发时候还会有很多相同的常量。问题引出
能不能执行一次命令就可以完成对每个模块的操作?(Maven的聚合)能不能不要在每个模块中都要定义相同的依赖包或者重复的元素呢?(Maven的继承)
聚合和继承的实现
在实现过程中,将继续使用上一个章节构建的项目模块,并在上进行更改,如果没有项目概念的,可以参考上一章节的讲解,构建相应的项目。聚合继承的操作只要在项目模块的目录中创建实现的pom.xml文件,然后在pom.xml文件中定义相应的操作即可,如下图所示
图1
但在这里我们可以通过Eclipse构建pom.xml文件(可以同时进行聚合和继承的操作),可以通过以下步骤
图2
图3
图4
然后生成pom.xml文件
图5
此时聚合的实现,只要在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.steven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../user-core</module> <module>../user-log</module> <module>../user-service</module> </modules> </project>
注意:
这里的<module>模块中../是指代上一级目录,因为在Eclipse中需要指向上一级才可以引入相应的模块。
这时候,对parent模块执行clean操作,会发现其包含的每个模块都已经执行了操作,
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] user-core [INFO] user-log [INFO] user-service [INFO] user-parent [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building user-core 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ user-core --- [INFO] Deleting E:\Workspaces\STSWorkspace\user-core\target [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building user-log 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ user-log --- [INFO] Deleting E:\Workspaces\STSWorkspace\user-log\target [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building user-service 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ user-service --- [INFO] Deleting E:\Workspaces\STSWorkspace\user-service\target [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building user-parent 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ user-parent --- [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] user-core ......................................... SUCCESS [0.255s] [INFO] user-log .......................................... SUCCESS [0.014s] [INFO] user-service ...................................... SUCCESS [0.015s] [INFO] user-parent ....................................... SUCCESS [0.002s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.500s [INFO] Finished at: Mon Feb 17 21:21:50 CST 2014 [INFO] Final Memory: 4M/15M [INFO] ------------------------------------------------------------------------
下面进行继承的操作,继承的操作在这里主要对依赖和常量进行配置,配置后的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.steven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../user-core</module> <module>../user-log</module> <module>../user-service</module> </modules> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.1.1.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.8</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-core</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-log</artifactId> <version>${project.version}</version> <exclusions> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> </project>
user-core中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> <parent> <groupId>com.steven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../user-parent/pom.xml</relativePath> </parent> <artifactId>user-core</artifactId> <packaging>jar</packaging> <name>user-core</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
user-log中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> <parent> <groupId>com.steven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../user-parent/pom.xml</relativePath> </parent> <artifactId>user-log</artifactId> <packaging>jar</packaging> <name>user-log</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </project>
user-service中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> <parent> <groupId>com.steven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../user-parent/pom.xml</relativePath> </parent> <artifactId>user-service</artifactId> <packaging>jar</packaging> <name>user-service</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-core</artifactId> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-log</artifactId> </dependency> </dependencies> </project>
此时即可完成继承的操作,会发现user-core,user-log,user-service中版本号,依赖范围,排除依赖都不需要写了,只要都写在父文件中就可以了,这样就减少了很多重复代码的编写了。
总结
此时就可以通过父类user-parent执行聚合继承操作后,对其他模块进行统一管理,这里有几个提示点:1、通过聚合就可以共同操作,通过继承就可以解决jar冲突,排除依赖一样可以写在父文件中,
2、在Eclipse中进行对模块依赖的控制,可以先将一个模块的所有依赖放到父文件的<dependencyManagement>节点下,然后在该模块中Eclipse会有重复的提示,删除重复行即可,然后在其他模块中先对重复行进行删除,对父文件中没有的依赖进行拷贝。
在此预祝大家学习愉快!有任何错误或者问题可以提出,在此不胜感激!
相关文章推荐
- struts-2.3.1+spring-framework-3.2.2+hibernate-4.1.1整合历程<第一部分>(详解)
- struts-2.3.1+spring-framework-3.2.2+hibernate-4.1.1整合历程<第二部分>(详解)
- SVN中基于Maven的Web项目更新到本地过程详解
- Pyhton 编程风格
- MySQL 日志的类型
- oracle开发学习篇之集合函数
- drbd + pacemaker
- 如何让你的网站排名靠前
- eclipse启动不起来,eclipse.ini配置问题(支持大内存64bit问题)
- 查找表里重复的数据
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- centos7使用无线wifi连接
- 备份下JSP的一些常用的迭代
- android初学
- 设置eclipse自动生成的author等注释
- centos7下快速安装mysql
- linux常用查看硬件设备信息命令
- 生产环境c3p0数据源用户名密码加密或解密
- power designer 连接mysql提示“connection test failed”
- TOMCAT设置JDK