知识点:聚合、继承、工程依赖、单元测试、多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中,子项目的groupIdversion一般和父项目相同,那么可以把子项目的这两个参数删除,这样会自动继承父项目的取值。

同样,如果其他的一些属性,所有子项目都是一样的,那么可以上移到父项目中设置,子项目中无需重复设置。比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>可以仅在父项目中设置一次。

除了这种情况以外,还有一种情况,就是依赖和插件。依赖和插件的情况是这样,某一个依赖或插件可能会被大部分子项目所使用,但是也可能有些子项目不需要使用,这样使用上述的方式,简简单单地进行继承就不合适了。

Manen提供dependencyManagementpluginManagement两个标签。使用这两个标签,可以在父项目中统一管理依赖和插件的配置参数,比如版本号啥的。而在子项目中,仅需列出需要使用的依赖和插件的groupIdartifactId就可以了,其他信息会自动从父项目管理的信息里面获取。

看例子,父项目中:

<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] 搭建多模块企业级项目的更多相关文章

  1. [转] 用Maven搭建多模块企业级项目

    转自:http://www.cnblogs.com/quanyongan/archive/2013/05/28/3103243.html 首先,前面几次学习已经学会了安装maven,如何创建maven ...

  2. maven搭建多模块企业级项目

    首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...

  3. Maven学习--- 搭建多模块企业级项目

    我们先在eclipse中新建一个maven项目,pom.xml的文件如下: 搭建多模块项目,必须要有一个packaging为pom的根目录.创建好这个maven项目后,我们对着项目右键-->ne ...

  4. Maven学习 (六) 搭建多模块企业级项目

    首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...

  5. 使用maven命令搭建多模块企业级项目

    http://www.cnblogs.com/xdp-gacl/p/4242221.html

  6. 在eclipse中公布maven的多模块web项目到tomcat上及单步debug模块jar

    1.在eclipse中公布maven的多模块web项目到tomcat eclipse和maven及tomcat的部署略去,还有maven的基础知识和使用在此处略去. 依照例如以下的步骤操作: 将lib ...

  7. 用maven搭建多模块项目

    首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的 ...

  8. SSH框架之一详解maven搭建多模块项目

    闲来无事,思量着自己搭建一个ssh框架,一来回顾熟悉一下ssh的内容,hibernate还就没用过了,生疏了都.二来整合一下,将其他掌握的和正在学习的框架核技术糅合到一起,就当是做一个demo练手了. ...

  9. Eclipse下使用maven搭建多模块项目

    暂时将项目分为如下几层: domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),有需要再另行添加(如common等): 目录结构: 一.app 该层为父层, ...

随机推荐

  1. Device Tree(三):代码分析

    一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考引入Device Tree的原因) 2.Device Tree的基础概 ...

  2. 编写一个Java程序,计算一下1,2,…,9这9个数字可以组成多少个互不相同的、无重复数字的三位偶数。

    package a; public class SanWeiOuShu { public static void main(String[] args) { String str="1234 ...

  3. hdu 1075 (map)

    http://acm.hdu.edu.cn/showproblem.php?pid=1075 What Are You Talking About Time Limit: 10000/5000 MS ...

  4. Linux命令工具基础04 磁盘管理

    Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...

  5. python_way ,day11 进程

    if __name__ == '__main__': for i in range(10): p = Process(target=foo, args=(i,)) # p.daemon = True ...

  6. XAF应用开发教程(二)业务对象模型之简单类型属性

    使用过ORM的朋友对这一部分理解起来会非常快,如果没有请自行补习吧:D. 不说废话,首先,我们来开发一个简单的CRM系统,CRM系统第一个信息当然是客户信息.我们只做个简单 的客户信息来了解一下XAF ...

  7. Java、fileless恶意软件威胁桌面安全

    工作原理:用户访问一个受侵的网站,不小心下载了最新类型的恶意软件.如果你的杀毒软件运行良好的话,就会阻止下载,至少能够检测到并隔离硬盘上的入侵文件.但是如果硬盘上没有文件监测呢?如果恶意软件只入侵内存 ...

  8. [转载] 一些非常好的 linux 基础工具

    http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html 作者整理的非常好, 需要的时候可以拿来参考

  9. poj3347Kadj Squares

    链接 这题其实与几何没太大关系,还不错的题目. 参考吴永辉的算法设计书. 用lefi.rigi分别表示正方形在x轴上的投影. 为了避免用小数,把边长都扩大sqrt(2)倍,这样lef1 = 0,rig ...

  10. matplotlib库的常用知识

    看看matplotlib是什么? matplotlib是python上的一个2D绘图库,它可以在夸平台上边出很多高质量的图像.综旨就是让简单的事变得更简单,让复杂的事变得可能.我们可以用matplot ...