当前位置: 首页 > 科技观察

说说Maven轻松重构项目

时间:2023-03-20 00:50:26 科技观察

现在是微服务时代,总有一天领导会让你重构一个大项目。大型项目痛点:编译慢,发布麻烦等。就像下图:真不敢动,一不小心就崩了。比如我们的用户系统,我们可以这样重构(这里只是举个例子,拆分每个项目的目的可能不一样)。user-system拆分为:user-webuser-serviceuser-daouser-common我们拆分之后,很有可能会有多个子项目同时依赖某个jar包。如果使用不当,可能每个模块使用的版本不一样,那么想一想有没有什么办法可以解决这类问题呢?答:是的。但是你得先明白两个概念:聚合和继承。聚合所谓聚合就是说,如果我们想一次构建多个项目模块,那么我们就需要将这些项目模块进行聚合。配置模板项目模块一项目模块二项目模块三项目模块...如何使用比如我们聚合了user-web、user-service、user-dao、user-common这四个项目模块。user-webuser-serviceuser-daouser-common注:其中它们模块的路径是相对路径。这样就解决了我们项目模块的聚合。下面来看看maven是如何解决重复依赖导致版本不同的问题的。继承为了消除重复,我们提取了很多相同的配置,比如:grouptId、version等。继承配置maven-democom.tian1.0-SNAPSHOT在继承代码过程中定义属性,Properties可以是已定义,例如:UTF-84.13.10.0.1-SNAPSHOT访问属性的方式是${junit.version},例如:maven-democom.tian1.0-快照4.0.0user-webjunitjunit${junit.version}这样我们就可以使用上面定义的属性junit.version=4.13.1父模块是用dependencyManagement管理的由于项目模块很多,我们有抽取一层抽象,抽取一个parent来管理子项目的公共依赖。为了项目的正确运行,所有的子项目必须使用统一版本的依赖,并且应用中各个项目的依赖和版本必须保持一致,以保证测试和发布的结果相同。junitjunit${junit.version}测试这样做的好处是可以选择性地继承子模块,而不是全部继承。这样做的好处:统一管理项目的版本号,保证应用的各个项目的依赖和版本一致,可以保证测试和发布是一样的结果,因此,在顶级pom。同时可以避免在使用的每个子项目中都声明一个版本号,这样当你想升级或者切换到另一个版本时,只需要在父容器中更新即可,不需要对任何子项目做任何修改;如果一个子项目需要另一个版本号,只需要在dependencies中声明一个版本号即可。子类会使用子类声明的版本号,而不是继承父类的版本号。聚合与继承的关系在之前我们搭建的多模块项目中,关系如下:mavendemo是user-web、user-service等几个模块的父项目。父项目主要用于配置一些公共配置,其他三个项目通过继承在父项目中配置。首先配置父项目的pom.xml,在项目中添加user-web、user-service、user这四个模块-dao和user-common是聚合jar包依赖的。与dependencyManagement相比,dependencies中的所有生命依赖会默认自动导入并被所有子项目继承。面试题:dependencyManagement和dependencies的区别DependencyManagement只声明了依赖,没有实现import,所以子项目需要显示声明需要的依赖。如果子项目中没有声明依赖,则不会继承父项目;只有在子项目中写了依赖且没有指定具体版本时,才会从父项目继承item,version和scope都是从父pom中读取;另外,如果子项目中指定了版本号,则使用子项目中指定的jar版本。dependencies即使子项目中没有写依赖,子项目仍然会继承父项目的依赖(全部继承)。如何在IDEA中配置Maven使用IDEA开发时,如何配置Maven?打开IDEA,在File--->Settings中。在输入框搜索:maven配置我们之前安装的maven目录,maven下的setting.xml,本地仓库目录。然后应用--->确定。当我们的项目对某个项目进行clean等操作时,直接在Lifcycle下双击即可。这样我们就把Maven集成到了我们的IDEA中。编译运行项目我们可以对父项目中的所有子项目进行编译、打包等操作。让我们打包所有子模块。然后就可以在对应的子工程中找到target目录和对应的jar包了。也可以单独对子工程进行打包等操作。例如,我们清理user-common。所以此时user-common下的target已经删除,其他子项目没有受到影响。IDEA中如何创建多项目模块首先创建user-parentmaven项目:然后删除src目录,创建子项目:选择user-parent项目,右键,选择New-->Module来NewModule界面,选择Maven,选择自己本地安装的JDK。下一个。填写子项名称,这里我们创建一个user-web子项:注意这里是user-web,默认是userweb,需要我们手动在两个字之间加一条横线:点击完成:然后看在user-parentpom:中的内容添加了模块,并添加了我们的user-web。同理,我们可以创建更多的word项目:查看user-parent中pom.xml文件的内容:到这里,我们就轻松搭建了我们的大项目user-parent,包括user-web,user-service,user-dao,-user-commmon子项目。如果你创建一个新的多模块项目,安装上面的步骤就完成了。如果拆分大项目,我们可以先用上面的方法创建自己的多模块项目,然后将大项目的内容复制到对应的模块中(注意此时子模块肯定会有相互依赖)。总结通过继承,我们可以定义项目的父项目,用于继承父项目的依赖、插件、属性等信息。聚合是指如果我们想一次构建多个项目模块,那么我们需要将这些项目模块聚合起来。使用IDEA中创建Module的方法,可以很方便的创建一个多模块项目。在父项目中用于管理子模块的依赖相关的依赖关系。重构大型项目时,只需要将每个模块拆分的代码复制到对应的子模块即可。本文转载自微信公众号《Java后端技术全栈》,可通过以下二维码关注。转载本文请联系Java后端技术全栈公众号。