参考文档:

http://kyfxbl.iteye.com/blog/1680045
http://blog.csdn.net/wanghantong/article/details/36427411
http://my.oschina.net/lujianing/blog/354121

最近在整理公司软件项目工程结构,最初的设计模块间耦合度太高,过多的公共service与业务逻辑强相关。以至于后期要做集群系统的工作难以展开,于是这个时候选择重构是唯一的办法了。

很荣幸这个光荣而又艰巨的任务被老大交给我和另外一个有5年JAVA经验的“老司机”,由于之前没有干过重构这种高端大气的活,这次也是抱着打打酱油瞻仰学习的态度来的,想想还有点小激动。

可惜人算不如天算,跟我合作的搭档在接手2天后就辞职走人了,辞职的原因我是不得而知。但有个尴尬的问题就是:活谁干?这真令人绝望。。。

往事休要再提,反正又不是第一次被坑了,生活还得继续。

重构的第一项工作是要先整出来一个新的工程结构,这里简单记录下,使用maven构建项目框架的过程。

基础结构如下:

project
|--business (核心业务)
|--business-api
|--business-service
|--business-message
|--business-dao
|--business-web
|--common (公共组件、服务、常量)
|--common-component
|--common-component-...
|--common-service
|--common-constants
|--common-...
|--management (管理台)
|--management-...
|--taskserver (定时任务、批处理)
|--msgserver (消息队列)

模块定义:

  business是整个工程的核心模块,它提供了对各终端(iOS、Android、Web&PC)的所有服务。

  business-api作为核心服务的提供者,基本上所有的业务操作都由它来完成,以war工程独立运行。集群方式下可以多部署几个api,在前端做好负载均衡即可。

  business-service 和 business-dao(mapper&entity) 是api的具体实现,这2者以jar包的形式供api依赖调用。

  business-message里存放了对外的接口契约(intf)、请求(request)和响应体(response),以jar包发行,方便供第三方或其他业务模块调用。

  business-web是我们的前端服务器,主要完成渲染和呈现的功能。一些像报表这样轻业务的功能可以在这里独立完成。以war包形式发行,支持集群部署。

  common是公共组件部分,一些常量或第三方接入的工作可以在这里实现。

  management是管理台,主要提供一些对业务编排、配置的的功能。

  taskserver批处理或定时任务服务器,独立运行。

  msgserver消息队列服务器,主要用来协助核心服务模块完成一些异步调用的工作。如发短信、消息推送等功能。

创建maven工程:

先创建一个父工程project用来做项目聚合

创建business,这里选择maven module或者maven project都可以,只要类型是pom就可以。我喜欢平行结构这里选择maven project。大体步骤和上面雷同,唯独最后一步:

在business下面创建2个war和3个jar模块(maven module):

建立完成如下:

其他模块的建立过程跟这里大同小异,再次略过。

依赖关系:

众所周知maven的使用pom.xml来完成依赖管理,我们可以通过图形化或者直接修改pom.xml的方式完成配置。

添加依赖后生成的pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.lichmama.project.business</groupId>
<artifactId>business</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.lichmama.project.business.api</groupId>
<artifactId>business-api</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.lichmama.project.business.service</groupId>
<artifactId>business-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.lichmama.project.business.dao</groupId>
<artifactId>business-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.lichmama.project.business.message</groupId>
<artifactId>business-message</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

(未完待续。。。)

maven多模块项目聚合的更多相关文章

  1. IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)

    Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不太熟悉,我们今天就来看看. IntelliJ中创建普通的Java聚合项目相对来说比较容易,不会涉及到web操作,涉及到we ...

  2. 38.IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)

    转自:https://blog.csdn.net/u012702547/article/details/77431765 Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不 ...

  3. IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)(转载)

    创建parent项目 1.打开IDEA,注意这里不要勾选模板,用模板创建过maven项目的小伙伴都知道模板创建项目非常慢,所以这里不要选模板,需要的文件夹我们后面自己来创建就可以了.所以这个页面直接点 ...

  4. SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程

    一,创建Maven多模块项目先建立外层父工程         File →new →project  选择Spring Initializr          Next下一步到以下页面 工程结构如下 ...

  5. maven多模块项目构建

    描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开   发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...

  6. Spring Boot 项目实战(一)Maven 多模块项目搭建

    一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...

  7. maven多模块项目,多web合并项目使用心得

    Fixflow,做中国最好的开源流程引擎!项目地址https://github.com/fixteam/fixflow 此文章适合maven初学者或想接触maven的用户,讲的只是皮毛,高手请自觉略过 ...

  8. Maven多模块项目搭建

    最近一直在思考如何能够更好的重用代码.减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出 ...

  9. SSM001/构建maven多模块项目

    一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...

随机推荐

  1. java关键字transient与volatile小结

    本文转自:http://heaven-arch.iteye.com/blog/1160693 transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶 ...

  2. Java Synchronization

    Volatile Since Java 5 the volatile keyword guarantees more than just the reading from and writing to ...

  3. (数字IC)低功耗设计入门(四)——RTL级低功耗设计

    二.RTL级低功耗设计 前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面.系统级的低功耗设计,主要是由系统级设计.具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是 ...

  4. 浅谈JAVA验证码~

    这两天在帮同学做个项目,项目中需要做个验证码,说实话那么多年竟然没注意过这东西,原理很简单,贴出来给大家做个参考. 1.简单介绍 一般稍微有些经验的程序员都不会再自己写原生验证码生成了,因为各种强大的 ...

  5. PHP基础入门(一)---世界上最好用的编程语言

    作为一名程序员,我们应该都听过这样一个梗:PHP编程语言,是世界上最好用的编程语言~~~下面来和大家看一下,什么是PHP↓↓↓ PHP PHP又名超文本预处理器,是一种通用开源脚本语言.PHP主要适用 ...

  6. Eclipse导入项目常见问题----乱码问题03

    有时打开导入的项目文件时,会出现如下图情况: 解决方法 如下图步骤所示: 此时,我们可以看到文件正常了 jdk版本问题(有个红色感叹号)01:http://blog.csdn.net/baidu_37 ...

  7. 如何用Python做词云(收藏)

    看过之后你有什么感觉?想不想自己做一张出来? 如果你的答案是肯定的,我们就不要拖延了,今天就来一步步从零开始做个词云分析图.当然,做为基础的词云图,肯定比不上刚才那两张信息图酷炫.不过不要紧,好的开始 ...

  8. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  9. nodeJs中npm详解

    npm 是 Node.js 的模块依赖管理工具.作为开发者使用的工具,主要解决开发 node.js 时会遇到的问题.如同 RubyGems 对于 Ruby 开发者和 Maven 对于 Java 开发者 ...

  10. 利用arpspoof和urlsnarf 进行ARP嗅探

    地址解析协议 (ARP, Address Resolution Protocol) 是如何将网络设备的MAC地址和其IP地址关联起来的,这样在同一个局域网内的设备就能相互知道彼此的存在.ARP基本上就 ...