一、传统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多模块划分和结构相关推荐

  1. idea中java项目显示不对_Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决...

    Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决,模块,工程,给大家,文件,灰色 Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决 易采站长 ...

  2. Java项目开发如何设计整体架构

    一.前言 最近刚读完一本书:<Netty.Zookeeper.Redis 并发实战>,个人觉得 Netty 部分是写得很不错的,读完之后又对 Netty 进行了一波很好的复习(之前用 sp ...

  3. idea14创建java项目_使用IntelliJ IDEA 14和Maven创建java web项目

    安装Maven 下载安装 去maven官网下载最新版. 解压到安装目录. 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PA ...

  4. 在 IntelliJ IDEA 中创建基本的 Maven 多模块项目

    在 IntelliJ IDEA 中创建基本的 Maven 多模块项目 笔者的环境: Maven 3.6.3 JDK 11 IntelliJ IDEA 2020.2.2 (Ultimate Editio ...

  5. 使用Maven构建Java项目

    使用Maven构建Java项目 本指南将引导您使用Maven构建一个简单的Java项目. 你会建立什么 您将创建一个提供一天中时间的应用程序,然后使用Maven进行构建. 你需要什么 约15分钟 最喜 ...

  6. maven创建java,Maven创建Java项目

    Maven使用原型 让我们打开命令控制台,进入到C:/MVN C:/MVN>mvn archetype:generate -DgroupId=com.companyname.bank -Dart ...

  7. JAVA项目的打包及生成.exe文件或者打包安装软件

    总体思路是先打成jar再把jar打成exe.主要看1.3和2.3里的内容就可以了. 1.将项目打成jar: 1.1要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可 ...

  8. Nginx系列五: handler 模块

    Nginx系列一:概念和配置 Nginx系列二: Nginx 的数据结构 Nginx系列三: Nginx 高级数据结构 Nginx系列四: Nginx的配置指令和handler模块概述 Nginx系列 ...

  9. crm客户关系管理系统(vue+maven多模块+SSM)

    一.技术介绍 1.1 maven多模块 这里写了maven多模块的介绍和为什么要使用maven多模块,后面还有maven多模块项目搭建实战. https://blog.csdn.net/qq_3689 ...

最新文章

  1. javafx 安装_JDK安装教程及环境配置
  2. ssdp协议 upnp_SSDP 简单服务发现协议
  3. 如何快速搭建一个免费的,无限流量的Blog
  4. 前端学习(2305):react之脚手架基本创建
  5. 结构体内存拷贝的两种方法
  6. 如何将mysql的数据库渲染到页面_vue.js实现数据库的JSON数据输出渲染到html页面功能示例...
  7. 深度强化学习-Policy Gradient基本实现
  8. java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)
  9. 【汇编优化】之x86汇编与C相互调用
  10. [codeVS1917] 深海机器人问题(费用流,拆边)
  11. 《设计师要懂心理学》-第九章-人会犯错
  12. java利用梦网云通讯发送短信
  13. 【chrome】谷歌chrome浏览器离线安装包的获取及使用技巧
  14. -stdcall详解
  15. 【HTML】极简个人主页设计
  16. MOS管(场效应管)工作原理,及反向导通应用
  17. Cocos Creator中的Tween
  18. 优秀自我简介200字_优秀学生自我介绍200字范文
  19. Word文件怎么在方框里面打对勾
  20. 使用CAD偏移和阵列命令绘制图形、使用CAD旋转复制命令绘制图形

热门文章

  1. 记录RSA加解密算法使用心得
  2. c语言编程n位自幂数,自幂数9位数查找之算法优化(C语言)(水仙数是4位数自幂数)...
  3. Oculus DK1芯片
  4. python原子操作_通俗易懂:说说 Python 里的线程安全、原子操作
  5. JS合并数组 对象
  6. Iframe自适应高度,Iframe高度问题解决
  7. RSA公钥加密和私钥加密的区别
  8. uni-app日志(一)——将view做成正圆形的头像
  9. html将字符转成浮点数,JavaScript字符串转浮点数
  10. IT footprint