maven多模块项目构建
描述
一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力。如果开发者在同一个项目下开 发,那么项目的管理、构建将会变得很难控制。因此设计人员会将项目划分为多个模块,多个模块独立开发、构建, 最终通过依赖整合到一起。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>
子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/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多模块项目构建的更多相关文章
- SpringBoot+Maven 多模块项目的构建、运行、打包
SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919
- Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块
一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...
- Maven环境下多模块项目构建
Maven环境下多模块项目构建 一.新建项目 1.建立我们的父模块par 2.建立我们的子模块dao层 3.建立我们的子模块service层 4.建立我们的子模块web层 5.全部配置完成后,怎么把我 ...
- SSM001/构建maven多模块项目
一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- IntelliJ Idea14 创建Maven多模块项目
Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...
- IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)
Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不太熟悉,我们今天就来看看. IntelliJ中创建普通的Java聚合项目相对来说比较容易,不会涉及到web操作,涉及到we ...
- Maven多模块项目依赖管理
Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...
- maven多模块项目,多web合并项目使用心得
Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...
随机推荐
- python 全栈开发笔记 4
反射 1.通过字符串的形式导入模块 2.通过字符串的形式,去模块中寻找指定函数并执行 ''' def f1(): return 'F1' def f2(): return 'F2' ''' #假设上面 ...
- Ubuntu 18.04安装中文输入法
reference: https://blog.csdn.net/fx_yzjy101/article/details/80243710 https://pinyin.sogou.com/linux/ ...
- mybatis中<foreach>标签的使用
标签太多,记一下不是特别常用的标签~留着脑袋瓜不机灵的时候看! <foreach>标签 该标签的作用是遍历集合类型的条件 <select id="countByUserL ...
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 阅读笔记
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (使用循环一致的对抗网络的非配对图像-图 ...
- MySQL数据库语句
一 . 常用mysql命令行命令 1 .启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2 . netstat –na | ...
- Java语法基础学习DayTwenty(反射机制续)
一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...
- Java并发知识分享
volatile的内存语义 从JSR-133(即从JDK1.5开始),volatile变量的写-读可以实现线程之间的通信 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷 ...
- 使用Pillow库 创建简单验证码
使用Pillow生成简单的验证码 本想做成字体各自按随机角度倾斜, 但没有在Pillow中找到相关的方法 import randomfrom PIL import Image, ImageDraw, ...
- 使用 <embed> 标签显示 flash文件(swf)格式 ,如何设置 width 和 height 宽度,高度.
1. embed 标签 支持 .swf 格式. .flv 的不支持. 2. 通常情况下, 网站中上传 多个 flash文件. 它的默认大小是不一样的. 而且 可以 宽度 大于 高度(横向的) ...
- ubuntu16.04微信安装
1.下载: git clone https://github.com/geeeeeeeeek/electronic-wechat/releases 2.移动微信客户端(下载解压重命名为wechat)到 ...