完整代码下载:http://download.csdn.net/download/liyanlei5858/10206848
以前一直用Spring作为容器构建项目,但是看到Spring官网一直在推Springboot,最重要的是Springboot确实避免自己寻找多个jar包(大多数情况下,可能自己都不记得该引入哪些jar包)和jar包之间冲突的问题,同时省掉了在集成其他框架时候,配置文件的配置,大大节省创建项目的过程,同时减少项目的代码量。自己目前认为的好处吧!不过项目搭建确实是一直以来一个比较头疼的问题,Springboot的诞生,感觉世界瞬间美好了,哈哈~~
网上看了一些文章,由于离Springboot的学习有一个月的时间,项目中也没有应用,感觉有点生疏,蒸腾了一天,也没把Springboot整合dubbo构建maven多模块项目给整明白,各种报错,无从下手!真的都在怀疑,这些写文章的人到底是不是自己亲自动手实践了,才转发的文章,还是直接就为了写文章而写文章,直接就转了,自己也只是知道个大概?可能也是当天运气比较差,不太适合研究新东西,嘿嘿~~
以下内容是自己亲自动手实践可以跑的起来的项目,有需要的朋友可以直接参考,如果软件环境(IntelliJ IDEA、Springboot、dubbo等)发生了改变,个人不保证5-6年之后还能正常跑,哈哈!
因为本系列的下一篇是《Spring Boot集成Dubbo》,所以本章就以创建多模块的dubbo项目作为示例。示例中的开发环境是Win 7,编辑器是Intellij IDEA,Java版本是1.8。
首先我们在IDEA中创建一个spring boot工程作为父项目。
一、在界面左上角选择File->New->Project后,选择Spring Initializr(不要选择maven,maven运行不起来,报各种错误),默认使用的Java版本是1.8。
二、点击Next,进入下一步,可以设置项目的一些基本信息。
这里我们先来温习下groupId、artifactId、package这三个参数的一般填写规范。
groupId和artifactId统称为“坐标”,是为了保证项目唯一性而提出的。groupId是项目组织唯一的标识符,实际对应JAVA的包的结构,ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。groupId一般分为多个段,一般第一段为域,第二段为公司名称。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org,公司名称是apache,artifactId是tomcat。包结构package最好是以groupId.artifactId打头的。
这是练习,为了省事,就没有直接按照标准来,直接默认了,但还是尽量按照上面的规范来填写。如下所示:
三、点击Next,进入下一个选择dependency的界面,作用是在pom中自动添加一些依赖,在项目开始时就下载。这里我们暂时不勾选任何依赖。
四、点击Next,进入下一个界面,填写工程名,并选择工程所在目录。填写完成后,点击Finish,即可创建一个spring boot项目。
在上面创建好的springboot-dubbo-parent工程名上,点击右键,选择New–>Module,进入New Module页面。
该模块为dubbo服务的提供方,实现springboot-dubbo-api中定义的接口,Name为springboot-dubbo-server,后面其他的参数都可参照父模块的参数设置。
下面创建另一个Module,dubbo服务的调用方,Name为springboot-dubbo-client,其他参数设置参照上步。
以上3个模块创建完成之后,整个项目的目录结构如下图所示。
我们可以删掉父模块的src目录,因为此处的父模块只做依赖管理,不需要编写代码。
到这里,一个父模块和两个子模块都创建完成啦~~
父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置。
1、父模块的打包类型
多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目。
我们的项目中目前一共有两个子模块,springboot-dubbo-server和springboot-dubbo-client。后续新增的子模块也必须加到父pom的modules中。
2、继承设置
继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习~~
maven项目之间的继承关系通过表示。这里使用的开发框架是spring boot,默认继承spring-boot-starter-parent。
3、使用dependencyManagement管理依赖版本号
一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
4、使用properties控制依赖包的版本号,便于版本维护
在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。
springboot-dubbo-parent/pom.xml
4.0.0 com.example springboot-dubbo-parent 0.0.1-SNAPSHOT pom springboot-dubbo-parent Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE springboot-dubbo-server springboot-dubbo-client UTF-8 UTF-8 1.8 2.5.3 3.4.5 0.1 org.springframework.boot spring-boot-starter-web 1.5.9.RELEASE com.alibaba dubbo ${dubbo.version} org.springframework spring org.apache.zookeeper zookeeper ${zk.version} org.slf4j slf4j-log4j12 log4j log4j com.github.sgroschupf zkclient ${zkclient.version} org.springframework.boot spring-boot-maven-plugin
1、继承设置
子模块的parent要使用顶层的父模块.
2、依赖设置
父模块pom中使用dependencyManagement来管理的依赖,在子模块pom中就不需要再写版本号了,exclusion元素也不需要再写。
springboot-dubbo-server\pom.xml
4.0.0 com.example springboot-dubbo-server 0.0.1-SNAPSHOT jar springboot-dubbo-server Demo project for Spring Boot com.example springboot-dubbo-parent 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.alibaba dubbo org.apache.zookeeper zookeeper com.github.sgroschupf zkclient org.springframework.boot spring-boot-maven-plugin
springvoot-dubbo-client/pom.xml
4.0.0 com.example springboot-dubbo-client 0.0.1-SNAPSHOT jar springboot-dubbo-client Demo project for Spring Boot com.example springboot-dubbo-parent 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web com.alibaba dubbo org.apache.zookeeper zookeeper com.github.sgroschupf zkclient com.example springboot-dubbo-server 0.0.1-SNAPSHOT org.springframework.boot spring-boot-maven-plugin
3、关于exclusions标签(了解)
当dependency A自身的依赖B,与其他dependency存在冲突的时候(最常见的就是版本冲突),我们就需要把B排除掉,这时就需要使用exclusions元素。
那么我们怎么知道一个dependency自身包含哪些依赖呢?
1、通过mvn dependency:tree命令查看依赖树
2、使用IDEA或其他IDA查看依赖树
点击IDEA右侧的Maven Projects,在每个模块的Dependencies中即可查看每个dependency内部的依赖及版本号,从来识别哪些依赖需要被排除掉。
以dubbo为例,我们先删除配置,点开Maven Projects,可以看到2.5.3版本的dubbo中使用的spring版本是2.5.6,这是一个很老的版本,有一些方法是没有的,现在在用的spring版本一般都是4.*的,所以我们需要把它排除掉,避免后续报错。
要查看当前项目中使用的spring版本,可以按住左键,然后点击父pom中的值,进入更上一层pom,再重复上步操作,可以看到spring的版本是4.3.12。
按住ctrl键,鼠标点击,然后点击父pom中的值,进入更上一层pom:
可以看到spring的版本是4.3.13:
这里就先不写代码了,到下一章再写。直接编译一下,如果编译成功,说明pom文件的配置没有什么大问题。
点开右侧Maven Projects,双击父模块Lifecycle中的compile,进行代码编译,或者直接在Terminal中执行命令:mvn compile。
编译通过啦~~
到这里,Spring Boot多模块项目创建与配置就介绍完啦。
这样一个过程实践下来,再去看开发的代码结构,应该会轻松不少吧~~~
参考:
https://testerhome.com/topics/11359
https://www.jianshu.com/p/6361a670ebf7