java模块化开发 maven_Maven 模块化开发_黑盒子12318的博客-程序员宅基地

技术标签: java模块化开发 maven  

(1)Maven 模块化开发

在多人协同开发时,特别是规模较大的项目,为了方便日后的代码维护和管理,我们会将每个开发人员的工作细分到具体的功能和模块上。随着项目的不断扩大,模块也会越来越多,后续会更加难以维护和扩展,为了应对这种情况可以采用微服务架构的方式进行开发。

以商城为例,我们可以将模块划分为如下形式:

统一的依赖管理(dependencies)

通用的工具类(commons)

领域模型(domain)

管理后台(admin)

商城前端(ui)

接口模块(api)

整个模块化开发过程主要是在开发思想上稍作了一些转变,只需要按照下面的流程操作即可。

创建根项目(工程)

把之前的my-shop项目修改成my-shop-bak,然后重新创建一个名 my-shop 的工程(在e盘某个目录下创建一个叫my-shop的文件夹,在IDEA打开该文件夹),现在my-shop不叫项目了,叫工程,工程是模块化开发的。

新建工程的pom.xml 文件

代码如下:

4.0.0

com.xue

my-shop

1.0.0-SNAPSHOT

pom

该项目称之为 Root 项目,主要作用是管理整个工程的全部模块,当有新模块加入时需要在 modules 元素下配置对应的模块目录

创建统一的依赖管理

在my-shop工程下创建一个名为 my-shop-dependencies 的项目,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop

1.0.0-SNAPSHOT

../pom.xml

my-shop-dependencies

pom

my-shop-dependencies

UTF-8

UTF-8

1.8

3.5

1.2

1.2.17

3.1.0

1.7.25

4.3.17.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-webmvc

${spring.version}

javax.servlet

javax.servlet-api

${servlet-api.version}

provided

javax.servlet

jstl

${jstl.version}

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}

org.slf4j

jcl-over-slf4j

${slf4j.version}

org.slf4j

jul-to-slf4j

${slf4j.version}

log4j

log4j

${log4j.version}

org.apache.commons

commons-lang3

${commons-lang3.version}

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

${java.version}

${java.version}

${project.build.sourceEncoding}

true

src/main/java

**/*.java

src/main/resources

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-dependencies 配置

my-shop-dependencies

创建通用的工具类

在my-shop工程下创建一个名为 my-shop-commons 的项目,用于存放所有的工具类的,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop-dependencies

1.0.0-SNAPSHOT

../my-shop-dependencies/pom.xml

my-shop-commons

jar

my-shop-commons

org.apache.commons

commons-lang3

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

org.slf4j

jcl-over-slf4j

org.slf4j

jul-to-slf4j

log4j

log4j

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-commons 配置

my-shop-dependencies

my-shop-commons

创建领域模型

在my-shop工程下创建一个名为 my-shop-domain 的项目,用于存放所有的实体类的,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop-dependencies

1.0.0-SNAPSHOT

../my-shop-dependencies/pom.xml

my-shop-domain

jar

my-shop-domain

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-web-admin 配置

my-shop-dependencies

my-shop-commons

my-shop-domain

创建管理后台

在my-shop工程下创建一个名为 my-shop-web-admin 的项目,用于存放所有的后台的相关代码的,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop-dependencies

1.0.0-SNAPSHOT

../my-shop-dependencies/pom.xml

my-shop-web-admin

war

my-shop-web-admin

com.xue

my-shop-domain

${project.parent.version}

com.xue

my-shop-commons

${project.parent.version}

org.springframework

spring-context

org.springframework

spring-webmvc

javax.servlet

javax.servlet-api

provided

javax.servlet

jstl

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-web-admin 配置

my-shop-dependencies

my-shop-commons

my-shop-domain

my-shop-web-admin

注意

由于我们用的快照版,当工程或者某个项目的某个版本号更改了,这时候我们需要总是更新快照版,修改setting的mavenhttps%3A%2F%2Fnote.youdao.com%2Fyws%2Fpublic%2Fresource%2F9d617032f9b866baef0054a4104f4000%2Fxmlnote%2FCE2D848C71B94337AF518FCF06C2E7F7%2F10166

创建商城前端

在my-shop工程下创建一个名为 my-shop-web-ui 的项目,用于存放所有的商城前台的相关代码的,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop-dependencies

1.0.0-SNAPSHOT

../my-shop-dependencies/pom.xml

my-shop-web-ui

war

my-shop-web-ui

com.xue

my-shop-commons

${project.parent.version}

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-web-ui 配置

my-shop-dependencies

my-shop-commons

my-shop-domain

my-shop-web-admin

my-shop-web-ui

创建接口模块

在my-shop工程下创建一个名为 my-shop-web-api 的项目,用于存放用到的应用程序接口及api的,并不是我们创建的interface,在其项目下创建pom.xml 文件如下:

4.0.0

com.xue

my-shop-dependencies

1.0.0-SNAPSHOT

../my-shop-dependencies/pom.xml

my-shop-web-api

war

my-shop-web-api

com.xue

my-shop-commons

${project.parent.version}

PS:别忘记在 my-shop 工程的 pom.xml 中增加 my-shop-web-api 配置

my-shop-dependencies

my-shop-commons

my-shop-domain

my-shop-web-admin

my-shop-web-ui

my-shop-web-api

好了,到此基本的架构已经搭建好了

a2046572148bc52ebce684f742e47854.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28908857/article/details/114673869

智能推荐

nodejs练手爬虫+API测试_普通网友的博客-程序员宅基地

项目说明这是一个基于express的node后端API服务,当时只是想抓取字幕组网站的下载资源,以备以后通过nas的方式去自动下载关注的美剧。不过后来慢慢扩展了几个API,以备以后写练手的webapp时,遇到没有数据调用的尴尬┑( ̄Д  ̄)┍项目地址:nodejs练手爬虫+API测试字幕组网站资源抓取原理:首先发送登录请求到目...

模块与包以及部分Python学习手册的摘录_无知游民lx的博客-程序员宅基地

模块对应于Python源代码文件多个功能相似的模块可以组织成一个包。Python中的模块包括系统模块、第三方模块和用户自定义模块。它们实质上是以.py为扩展名的Python文件通过导入模块,可以使用该模块中的变量、函数和类等。模块化程序设计的概念如果程序中包含多个可以复用的函数或类,则通常把相关的函数和类分组包含在单独的模块中。这些提供计算功能的模块称之为模块(或函数模块),导入并使...

【SpringBoot系列】SpringBoot注解详解_weixin_34186128的博客-程序员宅基地

【SpringBoot系列】SpringBoot注解详解一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让Spring Boot扫描到Configuration类...

Spring Boot实战(二)Spring常用配置 2.4 Profile_qq_3642489的博客-程序员宅基地

2.4.1点睛Profile为在不同环境下使用不同的配置提供了支持(开发环境下的配置和生产环境下的配置肯定是不同的,例如,数据库的配置)。(1)通过设定Environment的 ActiveProfiles来设定当前context需要使用的配置环境。在开发中使用@Profile注解类或者方法,达到在不同情况下选择实例化不同的Bean。(2)通过设定jvm的spring.profiles.ac...

不一样的技术创新——阿里巴巴2016双11背后的技术_weixin_34419321的博客-程序员宅基地

每年的“双11”是阿里技术的大阅兵和创新能力的集中检阅。2016年的“双11”背后,更是蕴藏了异常丰富的技术实践与突破。 历经1个月的编写,最终27篇精华技术文章入册《不一样的技术创新-阿里巴巴2016双11背后的技术》(以下简称《不一样的技术创新》)一书。这27篇“24K纯度”的技术干货,是阿里“双11”八年来技术演进结果的最新展示,凝聚了阿里工程师...

随便推点

zz emc面试经历_iteye_20522的博客-程序员宅基地

2006-5-11 9:27:00<o:p> 前天去emc面试了,无论是否通过,但是我觉得自己还是有一些收获,不枉从天津跑北京一趟: 首先面试我的是peter,和他交流起来太吃力,这时候感觉到要是我得英语口语好一点,多好啊!好多东西知道,表达不出来,当时心里只能埋怨自己,英语怎么这么差劲啊!到最后的时候,peter问我是否有问题问他的时候,我问了一个觉得现在对我很有意义的问题: ...

「欧洲以太坊」AE遭51%攻击之后_蜂巢Tech的博客-程序员宅基地

12月30日,两个老牌项目的资产AE(Aeternity)和HC(HyperCash)将在币安下架。12月24日,币安公告给出的下架理由是「当代币不再符合上币标准或有重大的行业变化时,币安将进行深度项目审核,并且可能将其下架处理」。此阶段,正值比特币连续突破历史新高的市场增长期,而AE和HC两个资产项目的总市值距离各自上一个历史新高分别缩水98%和91%,年内跌幅都在20%以上。值得一提的是,AE曾在12月7日遭遇51%攻击,多家交易平台因此受损,仅OKEx就损失了1600多万枚AE。AE...

QRCode制作二维码小结_Fighting_01的博客-程序员宅基地

利用qrcode.js插件将链接生成二维码相关代码如下所示://二维码参数设置var qrcode = new QRCode(document.getElementById("qrcode"), { width : 200, height : 200, colorDark : "green", colorLight : "#fff",});function makeCode () { //检测值是否存在,制作二维码 var elText = d...

达摩院送你100万,请坚持“看月亮”_阿里云云栖号的博客-程序员宅基地

首批青橙奖获奖者合影30年前,随便走进一间中国的小学教室,问其中埋头苦读的孩子,长大以后要做什么?“做个科学家!”梦想改变世界的小娃娃眼神透亮,声音也透亮。但少有人能够真正在成年之后,仍然选择走上这条光荣的荆棘路。科研工作本身的孤独、不被理解和默默无闻,打消了很多人的坚持热情。满地都是六便士的时代,抬头看看月亮成了奢侈的事情。一年前的9月,阿里巴巴达摩院设立了“达摩院青...

OCR银行卡号识别在金融行业应用_Tel-18519103264的博客-程序员宅基地

岁月变迁,随着消费观念的转变,人们不再把钱存在银行里挣利息,而是通过理财产品来实现资产升级。互联网金融的发展也使理财从线下走到了线上,理财、金融公司层出不穷,各个公司之间竞争激烈,客户体验好就是竞争的砝码。银行卡识别是通过光学字符识别技术来实现银行卡号的自动输入,减少手动输入的麻烦,减少客户等待时间,提升客户体验。     我们根据实际需求推出了银行卡识别sdk,互联网金融企业可以将银行卡...

形参和实参的区别与联系简要分析_XIAO_PING_PING的博客-程序员宅基地

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调

推荐文章

热门文章

相关标签