描述
  一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力。如果开发者在同一个项目下开   发,那么项目的管理、构建将会变得很难控制。因此设计人员会将项目划分为多个模块,多个模块独立开发、构建,    最终通过依赖整合到一起。Maven的聚合特性能够把项目的各个模块集合在一起构建,而Maven的继承特性则能帮助抽取各模块相同的依赖和     插件配置,在简化POM的同时,还能促进各个模块配置的一致性。

聚合
  通过一个POM模块来统一构建多个模块,Maven可以根据依赖关系计算出构建顺序,然后逐一构建。如果没有     聚合,则需要每个模块手动构建

聚合pom:pom.xml:

。。。。。。
<packaging>pom</packaging>
<modules>
<module>../complex_base</module>
<module>../complex_user</module>
<module>../complex_menu</module>
。。。。。。
</modules>
。。。。。。

配置解析:

  聚合模块只需要pom.xml文件,其他目录可以删除,在该文件中声明packaging为pom
  module元素用来配置聚合的模块,被聚合的模块可以和聚合模块是父子目录,也可以是平行目录  
  在聚合模块执行对应的构建生命周期阶段,将会按序执行各个模块的对应阶段

继承

继承是指POM的继承。子模块继承父模块,继承的是POM,也可以理解为配置的继承。通过继承能抽取各模块相同的依赖和插件配置到父模块,在简化POM的同时,还能促进各个模块配置的一致性。

父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.demo.maven.complex</groupId>
<artifactId>complex_integrated</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <name>complex_integrated</name>
<url>http://maven.apache.org</url> <!-- 聚合:mvn package,maven会计算依赖关系,逐模块构建 -->
<modules>
<module>../complex_base</module>
<module>../complex_user</module>
<module>../complex_menu</module>
<module>../complex_sample</module>
<module>../complex_web</module>
</modules> <!--jetty -->
<build>
<pluginManagement>
<plugins>
<!-- mvn jetty:run -Djetty.port=9999 -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.22.v20170606</version>
</plugin>
</plugins>
</pluginManagement>
</build> <!-- 依赖管理 :dependencyManagement下的依赖,不会引入当前项目,也不会引入子项目,只有在子项目中通过dependencies下的子元素进行了声明才会引入 -->
<!-- 依赖管理 :dependencyManagement可以在提供继承的便利性和统一性的基础上,提供一定的灵活性,pluginManagement的原理是一致的 -->
<dependencyManagement>
<dependencies>
<!-- javax.servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

pompom.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> <parent>
<groupId>com.demo.maven.complex</groupId>
<artifactId>complex_integrated</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 默认../pom.xml -->
<relativePath>../complex_integrated/pom.xml</relativePath>
</parent>
<artifactId>complex_web</artifactId>
<packaging>war</packaging>
<name>complex_web</name> <build>
<plugins>
<!-- mvn -Djetty.port=9999 jetty:run -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.22.v20170606</version> </plugin>
</plugins>
<finalName>complex_web</finalName>
</build> <dependencies>
<dependency>
<groupId>com.demo.maven.complex</groupId>
<artifactId>complex_user</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

配置解析:
  dependencyManagement下的依赖,不会引入当前模块,也不会引入子模块,只有在子模块中通过
  dependencies下的子元素进行了声明才会引入。pluginManagement的原理是一致的 父模块的packagin必须是pom,目录下可以只有pom.xml,src等目录不需要
  子模块可以继承父模块大多数的配置,如:groupId等,但并不是可以继承全部
  子模块中通过parent元素声明继承的父模块,子元素relativePath声明pom.xml文件的位置,如果父子模块是父子目录,则不需要relativePath声明
  子模块中对于继承自dependencyManagement的依赖,只需要声明依赖groupId、 artifactId

IDEA开发工具构建Maven 多模块项目

1、类似打开Project

2、新建聚合工程、填写相应的信息,下一步即可

3、新建子模块 ,Add as module to 和 parent 必须要选择,下一步即可

3、新建web子模块 ,Add as module to 和 parent 必须要选择,下一步即可

maven的配置

4、maven打包

5、POM配置文件如下
complex_integrated配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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.yygx</groupId>
<artifactId>complex_integrated</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>../complex_base</module>
<module>../complex_web</module>
</modules>
</project>

  
complex_base配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>complex_integrated</artifactId>
<groupId>com.yygx</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../complex_integrated/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>complex_base</artifactId>
</project>

  
complex_web配置文件

<?xml version="1.0" encoding="UTF-8"?>

<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">
<parent>
<artifactId>complex_integrated</artifactId>
<groupId>com.yygx</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../complex_integrated/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>complex_web</artifactId>
<packaging>war</packaging> <name>complex_web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.yygx</groupId>
<artifactId>complex_base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> <build>
<finalName>complex_web</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

  
配置tomcat启动

OK!!!!!!!!!!!

 

maven多模块项目构建的更多相关文章

  1. SpringBoot+Maven 多模块项目的构建、运行、打包

    SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919

  2. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

    一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...

  3. Maven环境下多模块项目构建

    Maven环境下多模块项目构建 一.新建项目 1.建立我们的父模块par 2.建立我们的子模块dao层 3.建立我们的子模块service层 4.建立我们的子模块web层 5.全部配置完成后,怎么把我 ...

  4. SSM001/构建maven多模块项目

    一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...

  5. SpringBoot+Maven 多模块项目的构建、运行、打包实战

    前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...

  6. IntelliJ Idea14 创建Maven多模块项目

    Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...

  7. IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)

    Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不太熟悉,我们今天就来看看. IntelliJ中创建普通的Java聚合项目相对来说比较容易,不会涉及到web操作,涉及到we ...

  8. Maven多模块项目依赖管理

    Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...

  9. maven多模块项目,多web合并项目使用心得

    Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...

随机推荐

  1. 在用单片机接受串口数据的时候,第一位是0x0A

    unsigned char data len=0; //命令字符串长度if(RI) //如果数据已经接收完,即RI=1{ RI=0; //对RI进行清零 cmd_buf[counter] = SBUF ...

  2. 常忽略的css技巧

    1.利用 CSS 的伪类中的content属性获取attr中的信息 效果图:鼠标放上去出现提示 css代码: .box{position:relative;display:inline-block;m ...

  3. AOP异常报错1

    Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0' ...

  4. C#获取常用的路径

    常用的这两个足够了,其他需要的自行百度 //获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名). string str = System.Diagnost ...

  5. 解决Chrome浏览器访问https提示“您的连接不是私密连接”的问题

    安装fiddler后,使用Chrome访问https网站时,可能会出现以下错误,本文说明如何解决此类问题: “您的连接不是私密连接”.“NET::ERR_CERT_AUTHORITY_INVALID” ...

  6. 原生JS和jQuery操作DOM的区别小结

    一.Js原生对象和jQuery实例对象的相互转化: (1).原生JS对象转JQ对象: $(DOM对象); (2). JQ对象转原生JS对象: $(DOM对象).get(index); //注意区分eq ...

  7. python之99乘法表

    #99乘法表 fir=1 while fir<=9: sec=1 while sec<=fir: print(str(fir)+'*'+str(sec)+'='+str(fir*sec)) ...

  8. QT自定义控件系列(二) --- Loading加载动画控件

    本系列主要使用Qt painter来实现一些基础控件.主要是对平时自行编写的一些自定义控件的总结. 为了简洁.低耦合,我们尽量不使用图片,qrc,ui等文件,而只使用c++的.h和.cpp文件. 由于 ...

  9. 使用VMware Workstation 14 Player或者Oracle VM VirtualBox安装Fedora-Workstation-netinst-x86_64-27-1.6操作系统的相关记录

    无论是在使用哪个(VMware或者Oracle VM)都遇到了一个问题:即使在安装完Fedoras操作系统之后,进行Reboot还是会进入之前一摸一样的安装界面,相当于再次安装.然而最最有效的解决办法 ...

  10. linux下crontab定时执行shell脚本调用oracle 存储过程

    问题:脚本内调用存储过程,脚本直接执行没问题,使用crontab 执行脚本存储过程未执行 原因:缺少oracle环境变量 解决:在shell脚本里添加oracle的环境变量 #!/bin/sh PAT ...