现在是微服务盛行时代,说不准哪一天领导就会让你对一个大项目进行重构。大项目的痛点:编译慢、发布繁琐等。就像下面这张图:
公司主营业务:网站建设、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出范县免费做网站回馈大家。
真的不敢动呀,一不小心就坍塌了。
比如说我们用户系统,我们可以这么重构(这里只是举例,每个项目拆分目的可能不同)。
user-system拆分成:
我们对其拆分后很有可能存在多个子项目中同时依赖某个jar包,如果使用不当可能会导致每个模块使用的版本不一样,所以想想能不能有什么方式来解决这类问题呢?
答案:能。但是得先了解两个概念:聚合和继承。
聚合
所谓的聚合就是我们如果想一次性构建多个项目模块,那我们就需要把这些项目模块进行聚合。
配置模板
项目模块一 项目模块二 项目模块三 项目模块...
使用方式
比如我们对user-web、user-service、user-dao、user-common四个项目模块进行聚合。
user-web user-service user-dao user-common
注意:其中module的路径为相对路径。
这样就解决了我们项目模块的聚合,我们再来看看maven是如何来解决由于重复依赖导致版本不一样的问题。
继承
继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptId,version等 。
继承的配置
maven-demo com.tian 1.0-SNAPSHOT
继承代码中定义属性
继承代码过程中,可以定义属性,例如:
UTF-8 4.13.1 0.0.1-SNAPSHOT
访问属性的方式为${junit.version},例如:
- 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">
maven-demo com.tian 1.0-SNAPSHOT 4.0.0 user-web junit junit ${junit.version}
这样我们就可以使用到上面定义的属性junit.version=4.13.1。
父模块用dependencyManagement进行管理
由于项目模块较多,所以我们又抽象了一层,抽出一个parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
junit junit ${junit.version} test
这样的好处是子模块可以有选择性的继承,而不需要全部继承。
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
聚合和继承的关系
在前面我们构建多模块项目中,关系如下
mavendemo就是user-web、user-service等几个模块的父项目。
父项目主要是用来配置一些公共的配置,其它三个项目再通过继承的方式拥有父项目中的配置,首先配置父项目的pom.xml,添加对项目的user-web、user-service、user-dao、user-common这四个模块进行聚合以及jar包依赖。
相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
面试题:dependencyManagement和dependencies的区别
IDEA中配置
Maven在使用IDEA开发时,如何将Maven配置呢?
打开IDEA,在File--->Settings。输入栏搜索:maven
配置我们之前安装好的maven目录、maven下面的setting.xml以及本地仓库目录。然后Apply--->OK。
我们项目对某个项目进行clean 等操作的时候,就可以直接双击Lifcycle下面的。
这样我们就把Maven集成到我们的IDEA中来了。
编译运行项目
我们可以在父项目中对所有子项目进行编译、打包等。我们就来对所有子模块进行打包。
然后在对应子项目中可以找到target目录和对应的jar包。
也可单独对某个子项目进行打包等操作。比如我们对user-common进行clean。
于是,此时的user-common下的target已经被删掉,其他子项目中并没有收到影响。
IDEA中如何创建多项目模块
先创建一个user-parent的maven项目:
然后把src目录删掉,创建子项目:
选中user-parent项目,右键,选中New-->Module
来到New Module界面,选择Maven,选好自己的本地安装的JDK。
next。填写子项目名称,我们这里创建一个user-web的子项目:
注意这里user-web,默认是userweb,需要我们手工在两个单词之间添加横线:
点击Finish:
然后在看看user-parent的pom中的内容:
已经添加了modules,同时把我们的user-web添加进去了。
同样方法,我们就可以创建更多字项目了:
再看看user-parent中的pom.xml文件内容:
到这里,我们就轻轻松松的构建了我们这个大项目user-parent,该项目包括了user-web,user-service,user-dao,-user-commmon子项目。
若是新建多模块项目,安装上面的步骤就搞定了。
若是大项目拆分,我们就可以使用上面的方式先创建好自己的多模块项目,然后对应把大项目里的内容拷贝到对应模块中(需要注意此时子模块直接肯定会有相互依赖的)。
总结
通过继承,我们可以定义项目的父类项目,用于继承父项目的依赖、插件、属性等信息。聚合就是我们如果想一次性构建多个项目模块,那我们就需要对这些项目模块进行聚合。
构建多模块项目,在IDEA中使用创建Module的方式很轻松就可以创建了。在父项目中使用来管理子模块的依赖相关依赖。
对大项目进行重构时,只需要把各模块拆分出来的代码拷贝到对应子模块就可以了。
本文转载自微信公众号「 Java后端技术全栈」,可以通过以下二维码关注。转载本文请联系 Java后端技术全栈公众号。
网站栏目:谈谈Maven轻松重构项目
文章路径:http://www.shufengxianlan.com/qtweb/news0/12450.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联