欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot创建多模块modules应用demo

程序员文章站 2024-02-03 20:28:10
...

为什么要使用多模块开发

        在平时的开发中,为了便于后期的维护,我们一般采用多模块开发。最常用的分层就是:domain、dao、service、web层。分层之后,各层级模块的职责功能明确,后期维护的时候会轻松许多。

多模块开发的核心:pom

        pom: Project Object Model 项目对象模型.pom文件都是对应一个项目。

        而我们这里要说的多模块,也是根据pom文件进行的关联。

<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.demo</groupId>
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build/>
</project>

一个基本的pom文件主要参数有:

project: pom.xml的*元素

modelVersion: 表示pom使用哪个版本的对象模型

groupId: 创建这个项目的团队或组织标识

artifactId: 项目的名称

version: 版本

packaging: 打包类型,如果是父项目,应为pom,子项目可为jar,war等

多模块项目的创建示例

(1)使用myeclipse新建一个maven项目

springboot创建多模块modules应用demo

这个项目userParent是作为父项目,所以设置packaging为pom.

创建成功后显示为:

springboot创建多模块modules应用demo

删除src文件夹

(2)创建子项目

在父项目上右键:New -> Maven Module

springboot创建多模块modules应用demo

选择packaging为默认的jar,父项目已默认选定

springboot创建多模块modules应用demo

springboot创建多模块modules应用demo

照此步骤,创建userDao,userService,userWeb项目

得到项目结构是:

springboot创建多模块modules应用demo

(3)子模块之间依赖关系绑定

在实际项目中,各个子模块之间不是完全独立的,可能会有一些依赖关系。比如userWeb会依赖userService,userDao,userDomain.而userDao依赖userDomain。那这些依赖关系,我们需要在pom文件中进行配置,让程序知道它们的绑定关系。

比如在userWeb的pom文件中的绑定关系:

		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userService</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userDao</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userDomain</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
与此类似,将userService和userDao之间的绑定关系在pom文件中建立起来

(4)启动测试

启动userWeb中的App类,浏览器测试。

springboot创建多模块modules应用demo

多模块项目的打包示例

打包测试的时候,遇到了很多问题。

在父项目的pom中需配置

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skipTests>true</skipTests>    <!--默认关掉单元测试 -->
				</configuration>
			</plugin>
		</plugins>
	</build>

在userWeb的pom中配置

	<build>
		<plugins>
			<plugin>
				<!-- The plugin rewrites your manifest -->
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration><!-- 指定该Main Class为全局的唯一入口 -->
					<mainClass>org.userWeb.App</mainClass>
					<layout>ZIP</layout>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中 -->
						</goals>
						<!--可以生成不含依赖包的不可执行Jar包 -->
						<!-- configuration> <classifier>exec</classifier> </configuration> -->
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

如果这里不配置,在启动时候会报错:

PS F:\workspace\userParent\userWeb\target> java -jar .\userWeb-0.0.1-SNAPSHOT.jar
.\userWeb-0.0.1-SNAPSHOT.jar中没有主清单属性

配置好了之后,在userParent目录下,执行mvn install package

在userParent的userWeb/target/下执行 java -jar .\userWeb-0.0.1-SNAPSHOT.jar

那整个平台就运行起来了。

源码地址:https://github.com/shirehappy/multiModules