19) maven 项目结构:聚集
Project Aggregation [,æɡrɪ'ɡeɪʃən]
https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
https://maven.apache.org/guides/mini/guide-multiple-modules.html
模块式开发(将所有模块聚合在一个父pom)
使用一个父pom,管理各个模块,控制模块间依赖关系和构建顺序

开始一个简单的demo来理解这个结构

1.创建一个父pom(Maven Project)
<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>cn.zno</groupId>
<artifactId>app-pom</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
</project>
2.创建一个jar模块(Maven Module)
右键 app-pom
new Maven Module

<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>cn.zno</groupId>
<artifactId>app-pom</artifactId>
<version>1.0</version>
</parent>
<artifactId>app-jar</artifactId>
</project>
3.创建一个war模块

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.zno</groupId>
<artifactId>app-pom</artifactId>
<version>1.0</version>
</parent>
<artifactId>app-war</artifactId>
<packaging>war</packaging>
<name>app-war Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>app-war</finalName>
</build>
</project>
现在父pom自动修改为:
<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>cn.zno</groupId>
<artifactId>app-pom</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>app-jar</module>
<module>app-war</module>
</modules>
</project>
现在install app-pom
右键app-pom ,Run As ,Maven install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] app-pom
[INFO] app-jar
[INFO] app-war Maven Webapp
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-pom 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-pom ---
[INFO] Installing F:\e\workspacetest\app-pom\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-pom\1.0\app-pom-1.0.pom
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-jar 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-jar ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ app-jar ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-jar ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ app-jar ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ app-jar ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ app-jar ---
[INFO] Building jar: F:\e\workspacetest\app-pom\app-jar\target\app-jar-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-jar ---
[INFO] Installing F:\e\workspacetest\app-pom\app-jar\target\app-jar-1.0.jar to C:\Users\wl\.m2\repository\cn\zno\app-jar\1.0\app-jar-1.0.jar
[INFO] Installing F:\e\workspacetest\app-pom\app-jar\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-jar\1.0\app-jar-1.0.pom
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-war Maven Webapp 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-war ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ app-war ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-war ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory F:\e\workspacetest\app-pom\app-war\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ app-war ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ app-war ---
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ app-war ---
[INFO] Packaging webapp
[INFO] Assembling webapp [app-war] in [F:\e\workspacetest\app-pom\app-war\target\app-war]
[INFO] Processing war project
[INFO] Copying webapp resources [F:\e\workspacetest\app-pom\app-war\src\main\webapp]
[INFO] Webapp assembled in [36 msecs]
[INFO] Building war: F:\e\workspacetest\app-pom\app-war\target\app-war.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-war ---
[INFO] Installing F:\e\workspacetest\app-pom\app-war\target\app-war.war to C:\Users\wl\.m2\repository\cn\zno\app-war\1.0\app-war-1.0.war
[INFO] Installing F:\e\workspacetest\app-pom\app-war\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-war\1.0\app-war-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] app-pom ............................................ SUCCESS [ 0.674 s]
[INFO] app-jar ............................................ SUCCESS [ 2.903 s]
[INFO] app-war Maven Webapp ............................... SUCCESS [ 0.759 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.483 s
[INFO] Finished at: 2016-09-07T15:11:51+08:00
[INFO] Final Memory: 13M/111M
[INFO] ------------------------------------------------------------------------
做了这几件事:
install 了一个pom文件
install 了一个 jar 文件
install 了一个 war 文件
构建顺序引用官网的话:
The following relationships are honoured when sorting projects:
- a project dependency on another module in the build
- a plugin declaration where the plugin is another modules in the build
- a plugin dependency on another module in the build
- a build extension declaration on another module in the build
- the order declared in the <modules> element (if no other rule applies)
因为app-war 和 app-jar 没有依赖关系,所以构建顺序是用的最后一个规则(modules 声明顺序)
为何模块化开发
- 分工明确代码复用
- SOA模块便于分布式
- 保护源码权限控制
- 局部构建节省时间
1.开发过程中可能遇到多个项目,里面的dao ,servie, util 重复使用,形成代码到处复制粘贴。等到想修改某处逻辑时傻眼了,因为要改N处。无谓的加大了开发成本和维护成本。
2.并发访问量提升之后考虑的SOA,如果最初设计时没有服务模块化,改动成本巨大。
3.版本控制软件svn 、git,如果代码全在一处,虽然只分配一个小任务只涉及到小部分代码,但全部的代码都要被下载下来。
4. 只修改了一个小功能没想到需要整体构建一下子,慢慢慢。
19) maven 项目结构:聚集的更多相关文章
- Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、
0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resou ...
- maven(三):maven项目结构及其运行机制
在上一篇中讲了如何创建maven项目,现在回到那个项目 项目结构 src/main/java:java代码目录 src/main/resources:资源目录,比如spring.xml文件,prope ...
- javaweb的maven项目结构
本来准备看javaweb的项目结构,因为之前自己建maven的项目结构,总是各种出错,后来干脆用maven自己携带的项目结构. 一个最基本的web目录结构如下,红框部分为必须有的,其他的随意. 这是一 ...
- 20) maven 项目结构:all in one
这是最常见的项目结构 垂直结构 也是初学者常用的 也是小项目常用的 优点 全部代码在一个项目里,一目了然. 结构简单易于理解 一开始时小巧 缺点 随之而来的缺点也十分明显 前端项目,后端项目,接口项目 ...
- Maven项目结构
maven项目主体结构: 另外,Eclipse新建项目时会生成.project..classpath及.settings目录下的文件,这些文件用于描述一个Eclipse项目, 接下来做一个简要的解析: ...
- 在maven项目结构下对于Resources目录下文件的存取
在maven项目中,文件结构如下: proj ---src ----main ----java ----Main.java ----resources ----userFile.properties ...
- Maven - 项目结构
一个基础的Maven Java项目结构图如下所示: Project Name |__________ pom.xml |__________ src | |__ ...
- maven(二)基于intellij idea搭建ssm的maven项目结构
项目配置文件整合步骤 1.这里使用maven来引入项目所需要的jar包,所以也就不需要手动来管理jar包了. pom.xml 配置模板如下: <project xmlns="http: ...
- 【maven项目结构】module 生成独立的jar
生成jar 生成jar的过程会出现以下问题: clean完了之后就会出现以下问题: install [INFO] Scanning for projects... [INFO] [INFO] ---- ...
随机推荐
- JSP中的数据库操作,MySQL基础操作(一)
一.JDBC JDBC(java data base concectivity),是一种用于执行SQL语句的java API,可以为多种关系库提供统一访问. 通常使用JDBC完成以下操作: 1)同数据 ...
- SQL truncate 、delete与drop区别[z]
[z]https://www.cnblogs.com/8765h/archive/2011/11/25/2374167.html 相同点: 1.truncate和不带where子句的delete.以及 ...
- sql like 语句
a like '%b%'的意思是,在a中找类似b的字符,在检索以逗号分隔的字段中时,两次弄反了顺序,比如,在a字段中查找有没有类似‘2,3’的记录,应该这么写:','+'2,3' like '%,'+ ...
- go 语言实现一个简单的 web 服务器
学习Go语言的一些感受,不一定准确. 假如发生战争,JAVA一般都是充当航母战斗群的角色.一旦出动,就是护卫舰.巡洋舰.航母舰载机.预警机.电子战飞机.潜艇等等浩浩荡荡,杀将过去.(JVM,数十个JA ...
- JQuery.validate 错误信息对话框
<script src="${pageContext.request.contextPath}/static/js/jquery-1.12.1.js"type="t ...
- (转)android:inputType参数类型说明
android:inputType参数类型说明 android:inputType="none"--输入普通字符 android:inputType="text" ...
- PAT 1009 说反话 (20)(代码)
1009 说反话 (20)(20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空 ...
- php 多进程
php 在使用场景中一般是处理web应用,所以多进程使用不适合在web中使用,且php-fpm中pcntl_fork不能使用,所以使用场景是在cgi模式下 一个进程调用pcntl_fork函数后,系统 ...
- spring batch遇到的一些问题
1.Spring Batch - A job instance already exists: JobInstanceAlreadyCompleteException 这是因为JobParameter ...
- windows下git的使用方法(码云)
这表文章主要是用了可视化操作: 使用命令行操作:https://www.cnblogs.com/mswyf/p/9370238.html 一.安装Git Bash 为了在windows下使用Git,我 ...