[maven] 搭建多模块企业级项目
知识点:聚合、继承、工程依赖、单元测试、多war聚合、cargo发布
① 准备工作
参考资料
http://www.cnblogs.com/quanyongan/archive/2013/05/28/3103243.html
http://www.cnblogs.com/xdp-gacl/p/4242221.html
http://blog.csdn.net/abing37/article/details/4951154
http://my.oschina.net/ydsakyclguozi/blog/411977?fromerr=I7N1vOPq http://kyfxbl.iteye.com/blog/1680045
http://blog.csdn.net/steveguoshao/article/details/38414145
安装maven插件
基于eclipse创建maven项目,如果没有maven插件,请先安装maven插件。
② 确立模块结构和依赖关系
模块结构

|-easyframework-root:总控项目,只包含一个pom.xml文件。
|-easyframework-web :整个项目的web层,页面显示以及控制层。
|-easyframework-core:核心业务项目,主要是Service处理业务逻辑。
|-easyframework-persist:数据持久层,操作底层数据库。
|-easyframework-model:数据模型,与数据库表字段对应的实体类。
|-easyframework-utils:工具类,所有工具类都提取出来写在这个项目中。
特别说明:创建项目时,只有easyframework-web是web项目(maven-archetype-webapp)打war包,其他则是java项目(maven-archetype-quicktart),打jar包。
各模块依赖关系

web 依赖 core model util
core 依赖 persist model util
persist 依赖 model
③ 创建总控项目 easyframework-root
特点
1、创建时类型为Maven Project
2、没有实际代码和资源文件,只有pom.xml文件
3、packaging节点值为pom
4、继承性:dependences 声明的依赖可以被子模版继承使用,properties 声明的变量可以被子模版使用。好处是在各个子模块中不需要一遍又一遍的重复添加同样的依赖元素,且如果在子项目中也有同样的依赖,则会覆盖父POM中的值。
5、子模块用modules和module元素声明
作用:承担聚合模块和父模块的作用,实现对所有子模块的统一管理,编译和部署。

④ 创建web子项目 easyframework-web
特点
1、创建时类型为Maven Module - maven-archetype-webapp
2、与其他子项目不同的是,包含有webapp
3、packaging节点值为war
4、声明父容器的节点为parent
作用:作为web层使用,并且最终作为容器的war包存在。

⑤ 创建其他子模块
特点:
1、创建时类型为Maven Module - maven-archetype-quicktart
2、packaging节点值为jar
3、声明父容器的节点为parent
4、根据子模块各自不同的依赖关系配置相互的依赖
⑥ 优化配置
按上面步骤创建的子项目,在pom.xml中有个parent节点,所以,他可以继承父项目的相关信息。没错,父子项目中存在继承关系。
在子项目的pom.xml中,子项目的groupId和version一般和父项目相同,那么可以把子项目的这两个参数删除,这样会自动继承父项目的取值。
同样,如果其他的一些属性,所有子项目都是一样的,那么可以上移到父项目中设置,子项目中无需重复设置。比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>可以仅在父项目中设置一次。
除了这种情况以外,还有一种情况,就是依赖和插件。依赖和插件的情况是这样,某一个依赖或插件可能会被大部分子项目所使用,但是也可能有些子项目不需要使用,这样使用上述的方式,简简单单地进行继承就不合适了。
Manen提供dependencyManagement和pluginManagement两个标签。使用这两个标签,可以在父项目中统一管理依赖和插件的配置参数,比如版本号啥的。而在子项目中,仅需列出需要使用的依赖和插件的groupId和artifactId就可以了,其他信息会自动从父项目管理的信息里面获取。
看例子,父项目中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
</dependencyManagement>
在子项目中:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
[maven] 搭建多模块企业级项目的更多相关文章
- [转] 用Maven搭建多模块企业级项目
转自:http://www.cnblogs.com/quanyongan/archive/2013/05/28/3103243.html 首先,前面几次学习已经学会了安装maven,如何创建maven ...
- maven搭建多模块企业级项目
首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...
- Maven学习--- 搭建多模块企业级项目
我们先在eclipse中新建一个maven项目,pom.xml的文件如下: 搭建多模块项目,必须要有一个packaging为pom的根目录.创建好这个maven项目后,我们对着项目右键-->ne ...
- Maven学习 (六) 搭建多模块企业级项目
首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...
- 使用maven命令搭建多模块企业级项目
http://www.cnblogs.com/xdp-gacl/p/4242221.html
- 在eclipse中公布maven的多模块web项目到tomcat上及单步debug模块jar
1.在eclipse中公布maven的多模块web项目到tomcat eclipse和maven及tomcat的部署略去,还有maven的基础知识和使用在此处略去. 依照例如以下的步骤操作: 将lib ...
- 用maven搭建多模块项目
首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...
- SSH框架之一详解maven搭建多模块项目
闲来无事,思量着自己搭建一个ssh框架,一来回顾熟悉一下ssh的内容,hibernate还就没用过了,生疏了都.二来整合一下,将其他掌握的和正在学习的框架核技术糅合到一起,就当是做一个demo练手了. ...
- Eclipse下使用maven搭建多模块项目
暂时将项目分为如下几层: domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),有需要再另行添加(如common等): 目录结构: 一.app 该层为父层, ...
随机推荐
- SqlSever基础 一个条件group by 一列有两个内容,分组并查看每个内容有多少行,并用as起名
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- BZOJ 3564 信号增幅仪
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3564 题意:给出平面上n个点,画出一个椭圆,椭圆的长轴是短轴的p倍,且长轴的方向为x轴逆时 ...
- CSS3弹力球
如下代码实现方块在限定区域内不停弹跳. <!DOCTYPE html> <html> <head> <style> div { width:100px; ...
- CodeForces 567C Geometric Progression
Geometric Progression Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I ...
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
- C#窗体->>随机四则运算(计算表达式)
用户需求: 程序能接收用户输入的整数答案,并判断对错程序结束时,统计出答对.答错的题目数量.补充说明:0——10的整数是随机生成的用户可以选择四则运算中的一种用户可以结束程序的运行,并显示统计结果.在 ...
- 【CC评网】2013.第41周 不求排版,简单就好
书单 碰上国庆,加上这周,消化掉几本书: <软件随想录>:Joel的随想录,也就是他Blog上的文章的摘选:整本书看下来轻松:写了篇读书笔记[传送门]: <中国在梁庄>:这本书 ...
- maven2 配置M2_REPO
从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,一般windows用户的操作系统都安装在C盘,所以这个目录 下的jar包 ...
- Effective C++ 的55个条款
看完Effective C++才觉得平时程序设计时需要注意的一些问题,有一定的收获,不过因为没什么项目实践, 并未很深入了解具体情况如何,还需后继实践~ 列举一下55个条款: 1. 视C++为一个语言 ...
- JavaScript 点击图片放大功能
<!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...