springboot创建多模块modules应用demo
为什么要使用多模块开发
在平时的开发中,为了便于后期的维护,我们一般采用多模块开发。最常用的分层就是: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项目
这个项目userParent是作为父项目,所以设置packaging为pom.
创建成功后显示为:
删除src文件夹
(2)创建子项目
在父项目上右键:New -> Maven Module
选择packaging为默认的jar,父项目已默认选定
照此步骤,创建userDao,userService,userWeb项目
得到项目结构是:
(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类,浏览器测试。
多模块项目的打包示例
打包测试的时候,遇到了很多问题。
在父项目的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
那整个平台就运行起来了。