Sping Boot多模块项目的创建和配置

在SpringCloud分布式微服务当中,我们需要创建很多个微服务,假如所有的微服务都分开编写,不方便我们的阅读和编码,何况一个人有可能一次性负责很多个模块。因此,我们可以利用SpringBoot的多模块开发,一个模块就是一个微服务的应用,方便我们去整体性的编写代码,后期的维护和管理也更加的方便。

接下来,我们首先去创建多个模块的应用

开发环境:Spring Boot(2.0.3),IDEA(2017),Maven(3.3.9),JDK(1.8)

一:多模块的创建

首先大家可以参考我的《创建一个Spring Boot工程》,去创建一个Spring Boot工程。


点击生成一个Spring Boot工程,把项目解压到我们的工程目录,然后用IDEA打开,这个工程作为整个多模块的父工程。

打开之后,右键点击父工程的工程名,选择New---->Module


点击Module之后,进入下一个界面,然后再点击next,然后填写模块的基本信息



这里需要注意的是,Artifact必须要小写,否则会弹出artifact contains illegal characters的错误提示信息。模块的名称注意填写,然后填写包名(建议不要使用默认的值)。点击下一步,可以在这一步选择Maven的依赖,假如是Web就选择Web,并且下面还提供了很多Spring Cloud组件的依赖,按照你的需求可以选择这一步加上或者后期再加。


点击Next


编写Module name,点击Finish,我们就给父工程上面增加了一个模块。

重复上面的步骤,再添加两个个模块,总共三个模块,完毕之后目录结构如下:


二:多模块项目的配置

我们在上面父工程上面建立了两个新的模块,我们现在需要做一些配置

首先把父工程里面无用的文件以及文件夹删除掉:包括三个模块的mvnw、mvnw.cmd文件及.mvn文件夹,还有父模块的src目录,因为此处的父模块只做依赖管理,不需要编写代码。


第二步:在父工程的pom文件当中,有两个非常重要的操作,第一个就是父模块的packaging一定是pom类型,第二个就是在pom文件当中把子模块的名称全部添加进去。

下面为父工程的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

	<groupId>com.smartisan</groupId>
	<artifactId>RediaMallCloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!--父模块打包类型必须为pom-->
	<packaging>pom</packaging>

	<!--在父pom文件当中添加模块的名称,子模块pom中<name>标签当中的值-->
	<modules>
		<module>Mall_EurekaCenter</module>
		<module>Mall_ManagerService</module>
		<module>Mall_WechatService</module>
	</modules>

	<name>RediaMallCloud</name>
	<description>Demo project for Spring Boot</description>

	<!-- parent指明继承关系,给出被继承的父项目的具体信息-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

第三步:子模块pom的配置,我们在子模块的pom文件当中要进行一个操作,就是子模块的parent要使用顶层的父模块

下面贴出一个子模块的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

	<groupId>com.smartisan</groupId>
	<artifactId>malleurekacenter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Mall_EurekaCenter</name>
	<description>Demo project for Spring Boot</description>

	<!-- 把原有的parent的信息注释掉,继承我们的父工程-->
	<!--其他的子模块只需要把下面这个<parent>标签当中的值更改为一样的就可以了-->
	<parent>
		<!--<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/>--> <!-- lookup parent from repository -->
		<groupId>com.smartisan</groupId>
		<artifactId>RediaMallCloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

三:配置完成的测试

我们进行了上述的配置,进行一个最简单的测试,打开IDEA右边工具栏当中的Maven Projects插件,选择RediaMallCloud当中的compile,点击执行。


我们可以看到,编译已经通过了。


四:其他的一些优化

1.假如我们想统一的进行版本的管理,我们可以在父pom文件当中引入<dependencyManagement></dependencyManagement>这个标签,这样我们在子pom文件当中,相同依赖的<version>标签就不需要写了,因为Maven会自动的向上去寻找对应的版本号。

2.我们可以使用properties控制依赖包的版本号,便于版本维护。

父pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

	<groupId>com.smartisan</groupId>
	<artifactId>RediaMallCloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!--父模块打包类型必须为pom-->
	<packaging>pom</packaging>

	<!--在父pom文件当中添加模块的名称,子模块pom中<name>标签当中的值-->
	<modules>
		<module>Mall_EurekaCenter</module>
		<module>Mall_ManagerService</module>
		<module>Mall_WechatService</module>
	</modules>

	<name>RediaMallCloud</name>
	<description>Demo project for Spring Boot</description>

	<!-- parent指明继承关系,给出被继承的父项目的具体信息-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!-- 在properties中统一控制依赖包的版本,更清晰-->
		<dubbo.version>2.5.3</dubbo.version>
		<zkclient.version>0.10</zkclient.version>
	</properties>

	<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--新增后续dubbo项目中所需依赖,dubbo、zk-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<!--<version>2.5.3</version>-->    <!--使用properties中配置的版本号-->
			<version>${dubbo.version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<!--<version>0.10</version>-->    <!--使用properties中配置的版本号-->
			<version>${zkclient.version}</version>
		</dependency>
	</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

其中一个子pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>

	<groupId>com.smartisan</groupId>
	<artifactId>malleurekacenter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Mall_EurekaCenter</name>
	<description>Demo project for Spring Boot</description>

	<!-- 把原有的parent的信息注释掉,继承我们的父工程-->
	<!--其他的子模块只需要把下面这个<parent>标签当中的值更改为一样的就可以了-->
	<parent>
		<!--<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/>--> <!-- lookup parent from repository -->
		<groupId>com.smartisan</groupId>
		<artifactId>RediaMallCloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--新增后续dubbo项目中所需依赖,dubbo、zk。
       父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<!--<version>2.5.3</version>-->
			<!--<exclusions>-->
			<!--<exclusion>-->
			<!--<groupId>org.springframework</groupId>-->
			<!--<artifactId>spring</artifactId>-->
			<!--</exclusion>-->
			<!--</exclusions>-->
		</dependency>

		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<!--<version>0.10</version>-->
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

一步一步的走到最后面,我们已经建好了一个springboot的多模块的项目,希望看到的人都可以轻松的构建出来一个SpringBoot多模块出来,假如有问题的欢迎留下邮箱索要代码,有问题也希望大家能够共同探讨,一起进步。


猜你喜欢

转载自blog.csdn.net/qq_38455201/article/details/80773758