知识点:聚合、继承、工程依赖、单元测试、多war聚合、cargo发布html
① 准备工做java
参考资料web
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插件。api
② 确立模块结构和依赖关系app
模块结构eclipse
|-easyframework-root:总控项目,只包含一个pom.xml文件。webapp
|-easyframework-web :整个项目的web层,页面显示以及控制层。maven
|-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
特色
一、建立时类型为Maven Project
二、没有实际代码和资源文件,只有pom.xml文件
三、packaging节点值为pom
四、继承性:dependences 声明的依赖能够被子模版继承使用,properties 声明的变量能够被子模版使用。好处是在各个子模块中不须要一遍又一遍的重复添加一样的依赖元素,且若是在子项目中也有一样的依赖,则会覆盖父POM中的值。
五、子模块用modules和module元素声明
做用:承担聚合模块和父模块的做用,实现对全部子模块的统一管理,编译和部署。
④ 建立web子项目 easyframework-web
特色
一、建立时类型为Maven Module - maven-archetype-webapp
二、与其余子项目不一样的是,包含有webapp
三、packaging节点值为war
四、声明父容器的节点为parent
做用:做为web层使用,而且最终做为容器的war包存在。
⑤ 建立其余子模块
特色:
一、建立时类型为Maven Module - maven-archetype-quicktart
二、packaging节点值为jar
三、声明父容器的节点为parent
四、根据子模块各自不一样的依赖关系配置相互的依赖
⑥ 优化配置
按上面步骤建立的子项目,在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>