博客概要:Springboot多模块项目搭建 + 打包jar运行 + 打包war运行 + 一个启动类(有的项目是多模块多个启动类),为后续的SpringCloud项目做准备。web
父工程:father 子模块:sun一、sun二、web(启动模块)
勾选SpringWeb和lombokspring
如图所示apache
而后删除src文件夹,如图:app
而后修改pom文件,添加一行打包类型maven
<packaging>pom</packaging>
建立3个子模块,分别为sun一、sun二、web,不勾选任何依赖。spring-boot
建立好三个模块以后,在father项目父工程pom.xml添加依赖单元测试
<modules> <module>sun1</module> <module>sun2</module> <module>web</module> </modules>
更换pom.xml插件,准备打包使用测试
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <skipTests>true</skipTests> <!--默认关掉单元测试 --> </configuration> </plugin> </plugins> </build>
更换继承:sun一、sun二、web三个子模块分别继承father父工程,这样就一样拥有了lombok以及web的依赖ui
<parent> <groupId>com.osc</groupId> <artifactId>father</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
删除:由于web是启动类项目,不须要因此相关的打包插件,可是sun一、sun2须要删除下面的,由于是多余的,以下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
删除:删除共同的配置
<properties> <java.version>1.8</java.version> </properties>
添加:打包类型
<packaging>jar</packaging>
sun1项目上建立entity层,这个时候就可使用lombok插件了,由于继承了父工程
@Data @AllArgsConstructor @ToString public class UserEntity { private String name; private int age; private String address; }
sun2定义为service层,须要使用sun1的实体类,而后依赖sun1,在sun2的pom.xml中配置
<dependency> <groupId>com.osc</groupId> <artifactId>sun1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
编写service
@Service public class HelloService { public UserEntity getUser(){ return new UserEntity("jiutian",23,"beijing"); } }
这个时候咱们就是引用sun1的实体类
最后咱们建立web层,这个不须要删除启动类,而后都依赖sun1,sun2,把他们引入到pom.xml文件中,添加sun1,sun2依赖。
<dependency> <groupId>com.osc</groupId> <artifactId>sun1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.osc</groupId> <artifactId>sun2</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
最后在启动类上添加扫描,由于多个模块,web启动类运行的话默认只运行扫描本身这个模块,致使找不到其余模块,因此添加一个扫描。
@ComponentScan(basePackages = {"com.osc.sun2.service","com.osc.web.controller"})
而后web项目上建立一个controller层
@RestController public class HelloController { @Autowired HelloService helloService; @GetMapping(value = "/test") public String test(){ return helloService.getUser().toString(); } }
在web项目pom.xml中插件更换为
<build> <!--打包以后的名字--> <finalName>demo_many</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.osc.web.WebApplication</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> <!-- <!–能够生成不含依赖包的不可执行Jar包–> <configuration> <classifier>exec</classifier> </configuration>--> </execution> </executions> </plugin> </plugins> </build>
而后使用IDEA右侧maven,固然,这个maven必定是root的,也就是父工程下面才能够,以下:
而后jar包打包成功,如图:
而后jar包就此成功,而后咱们去命令行启动
这个时候启动了,咱们继续刚刚访问,
这个和本地测试同样,说明jar包成功。
将web项目的pom文件
<packaging>war</packaging>
而后删掉指向类配置,剩下的以下
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins>
如图:
关掉以前启动的jar命令,用kill -9 关掉,而后启动war,如图:
接下来,继续测试,
仍是以前的结果,说明不管是咱们在IDEA上测试,仍是经过打包jar或者war,均可以获得相同结果,这就说明咱们的多模块项目单启动类配置完成了。
注意:并非只有web项目才能够写controller层,若是你再建立一个模块,把它依赖引入,而后在启动类上添加扫描位置,其余子模块的controller也是能够执行的。通常状况下咱们企业作项目也每每是这样子的,一个模块的controller层用来后台管理系统的,另一个模块的controller层用来前台系统的。