java项目常见业务模块,C6 架构系列——Maven多模块划分和结构
一、传统Java Web项目
# 传统Java Web项目
这类项目常见组织方式就是在一个项目里面,放置
src\[java文件]
resources\[配置文件]
webapp\[js/jsp/css/jpg/xml等]
其中src下的java代码,常见包结构如下:
com.company.core
com.company.core.controller
com.company.core.dao
com.company.core.service
com.company.user
com.company.system
com.company.order
等。
虽然看上去,也划分了核心模块(即底层模块)、功能模块等,但随着开发的推进,包之间的代码
就会出现交叉依赖的情况,比如user依赖core、system、order,而order也依赖user包。
由于所有代码都是在一个项目里面,调用是很容易和随意,如果通过项目管理方式来强制要求依赖
方式,则管理难度很高,需要反复复查代码。所以最后导致整个各个包之间是低内聚高耦合。
另外,由于所有代码都在一个项目里面,所以随着代码的不断增加,当修改一个类时,也会导致整个
项目重新编译,开发效率低下。
为了避免出现这些情况,C6软件架构采用了Mavan的多模块划分方式进行管理。C6 架构系列——Maven多模块划分和结构
二、C6的Maven多模块管理
整个项目结构如下图:
整个项目采用Maven的最佳实践 —— 划分多模块方式来管理。
规划了三个顶层的项目:craft6-base-root
包含多个子模块,每个子模块均是一个独立的Maven项目。
这个项目提供所有框架底层的支持,以及通用的功能实现。
下面会详细阐述。
craft6-meta
准确来说,这只是文件夹。里面放置了项目部署工具 和 代码生成工具。
craft6-platform
该项目依赖craft6-base-root的若干个子模块,获得架构的底层支持,
这样就不需要重复配置和开发了。然后在该项目中开发博客、方案模块相关功能。
(图片中的Servers只是部署Tomcat时生成的文件夹,不是开发项目)
三、craft6-base-root项目的Maven Pom.xml依赖设计
这个项目下面包括多个子模块,每个子模块分别实现专门的功能,保证了高内聚,低耦合的设计要求。
模块之间的依赖大多基于接口和抽象类的方式,通过Maven的dependency依赖配置完成。
该项目包含三个maven层次,每层有一个pom.xml文件,如下图:
craft6-base-root根目录的pom.xml
这是项目最顶层的pom文件,声明了该项目包含的模块、所有依赖的第三方jar、
build和report的插件配置等。在这里声明了版本和范围(scope)。
base-parent的pom.xml
在这里声明公共的第三方jar默认依赖、内部的jar依赖(比如base-api/base-core/base-db-mybatis等,
对于base-ou是依赖base-mybatis的)
base-api(或其它子模块)的pom.xml
继承base-parent/pom.xml,引入该模块需要的jar,由于在root/pom.xml已经声明了版本,
所以这里就不需要在声明版本和范围了。
四、craft6-platform 平台项目
平台项目是一个独立项目,有自身的pom.xml,但依赖craft6-base-root的base-web模块,
该base-web模块是craft6-base-root最外层的模块,依赖其它所有模块,供web项目使用。
集成了Spring MVC + FreeMarker + Spring Security + ActiveMQ等开源技术。
这样相当于要开发一个web项目时,只需要新建一个项目,然后在maven中依赖base-web模块
即可获得所有底层的支持,无需重新配置和管理第三方的依赖(比如对Spring的依赖)。
craft6-platform的pom.xml截图如下:
可以看到该项目需要引入的第三方包是很少的,因为大部分的包已经由base-web依赖引用,
并且配置好了。
java项目常见业务模块,C6 架构系列——Maven多模块划分和结构相关推荐
- idea中java项目显示不对_Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决...
Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决,模块,工程,给大家,文件,灰色 Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决 易采站长 ...
- Java项目开发如何设计整体架构
一.前言 最近刚读完一本书:<Netty.Zookeeper.Redis 并发实战>,个人觉得 Netty 部分是写得很不错的,读完之后又对 Netty 进行了一波很好的复习(之前用 sp ...
- idea14创建java项目_使用IntelliJ IDEA 14和Maven创建java web项目
安装Maven 下载安装 去maven官网下载最新版. 解压到安装目录. 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PA ...
- 在 IntelliJ IDEA 中创建基本的 Maven 多模块项目
在 IntelliJ IDEA 中创建基本的 Maven 多模块项目 笔者的环境: Maven 3.6.3 JDK 11 IntelliJ IDEA 2020.2.2 (Ultimate Editio ...
- 使用Maven构建Java项目
使用Maven构建Java项目 本指南将引导您使用Maven构建一个简单的Java项目. 你会建立什么 您将创建一个提供一天中时间的应用程序,然后使用Maven进行构建. 你需要什么 约15分钟 最喜 ...
- maven创建java,Maven创建Java项目
Maven使用原型 让我们打开命令控制台,进入到C:/MVN C:/MVN>mvn archetype:generate -DgroupId=com.companyname.bank -Dart ...
- JAVA项目的打包及生成.exe文件或者打包安装软件
总体思路是先打成jar再把jar打成exe.主要看1.3和2.3里的内容就可以了. 1.将项目打成jar: 1.1要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可 ...
- Nginx系列五: handler 模块
Nginx系列一:概念和配置 Nginx系列二: Nginx 的数据结构 Nginx系列三: Nginx 高级数据结构 Nginx系列四: Nginx的配置指令和handler模块概述 Nginx系列 ...
- crm客户关系管理系统(vue+maven多模块+SSM)
一.技术介绍 1.1 maven多模块 这里写了maven多模块的介绍和为什么要使用maven多模块,后面还有maven多模块项目搭建实战. https://blog.csdn.net/qq_3689 ...
最新文章
- javafx 安装_JDK安装教程及环境配置
- ssdp协议 upnp_SSDP 简单服务发现协议
- 如何快速搭建一个免费的,无限流量的Blog
- 前端学习(2305):react之脚手架基本创建
- 结构体内存拷贝的两种方法
- 如何将mysql的数据库渲染到页面_vue.js实现数据库的JSON数据输出渲染到html页面功能示例...
- 深度强化学习-Policy Gradient基本实现
- java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)
- 【汇编优化】之x86汇编与C相互调用
- [codeVS1917] 深海机器人问题(费用流,拆边)
- 《设计师要懂心理学》-第九章-人会犯错
- java利用梦网云通讯发送短信
- 【chrome】谷歌chrome浏览器离线安装包的获取及使用技巧
- -stdcall详解
- 【HTML】极简个人主页设计
- MOS管(场效应管)工作原理,及反向导通应用
- Cocos Creator中的Tween
- 优秀自我简介200字_优秀学生自我介绍200字范文
- Word文件怎么在方框里面打对勾
- 使用CAD偏移和阵列命令绘制图形、使用CAD旋转复制命令绘制图形