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] ---- ...
随机推荐
- gson所需jar包
共需要四个jar包,分别为: gson-2.0.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar slf4j-log4j12-1.7.10.jar 如果想要进行文件读 ...
- webstorm安装配置
1.webstorm是一款优秀的前端设计工具,在官网下载webstorm.exe文件 官网地址:http://www.jetbrains.com/webstorm/ 2.一直next执行下一步进行安装 ...
- js document.load 和 document.ready 区别
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- python学习笔记Day2
字符编码 编程规范(PEP8) 变量1.常量(用大写) 2.变量 常用类型:str .int.float. long.bool 字串格式化: %d 整数 %2d占两位 %02d占两位用0填充 %f 浮 ...
- c#异步等待
1:一直等待 2方法 现实等待 3:方法 带返回值得 begin -endinvoke 4: func 带返回值
- windbg 加载dump监测蓝屏原因时出现重复的星星框提示解决办法
加载dump文件出现了重复上边的信息 总结: 要reload一下环境,说明符号库未加载出现的错误,!sym noisy 显示详细信息 ,reload重载符号库,未找到的,从服务器进行下载, 注意,第一 ...
- string+和stringbuffer的速度比较
public class Main{ public static void main(String[] args){ /* 1 */ String string = "a" + & ...
- Mike and strings 798B
B. Mike and strings time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 探索未知种族之osg类生物---器官初始化一
我们把ViewerBase::frame()比作osg这类生物的肺,首先我们先来大概的看一下‘肺’长什么样子,有哪几部分组成.在这之前得对一些固定的零件进行说明,例如_done代表osg的viewer ...
- Codeforces 799D. String Game 二分
D. String Game time limit per test:2 seconds memory limit per test:512 megabytes input:standard inpu ...