使用 Maven 搭建 Springboot 多模块企业级项目
工具说明
- IDEA 2020.2.1
- Maven 3.6.3
- Springboot 2.4.0
操作步骤
创建一个空的 Maven 项目
在 IDEA 中选择新建项目,窗口中选择 Maven 项目。
填写项目名称。
这里,我们对 Maven 项目的pom.xml
文件内容稍作修改,如下:
<?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>org.example</groupId>-->
<!-- <artifactId>multi</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- 修改为 -->
<groupId>org.example.multi</groupId>
<artifactId>root</artifactId>
<version>1</version>
</project>
创建一个 Spring boot 模块( Module )
这次新建一个 Module
并选在Spring Initializr
:
输入项目信息Next
:
选在所需的依赖包 Finish
:
模块创建后,将模块添加到项目的 root 模块中,并将今后可能共有的依赖包复制到 root 模块的 pom.xml 里。
ROOT 的 pom.xml 文件
<?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">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.aclyyx.multi</groupId>
<artifactId>root</artifactId>
<version>1</version>
<!-- 注意:这里要定义为 pom -->
<packaging>pom</packaging>
<!-- 模块引用 -->
<modules>
<module>multi-web</module>
</modules>
<!-- 并将今后可能共有的依赖包复制到 root 模块 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
WEB 模块的 pom.xml 文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 原本父节点为 org.springframework.boot:spring-boot-starter-parent-->
<parent>
<groupId>com.aclyyx.multi</groupId>
<artifactId>root</artifactId>
<version>1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.aclyyx.multi</groupId>
<artifactId>multi-web</artifactId>
<version>1</version>
<name>multi-web</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试模块可用性 1
在 WEB 模块创建一个 Controller 类,内容如下:
package com.aclyyx.multi.multiweb.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("demo")
public class DemoController {
@GetMapping("hi")
public String hi() {
return "HI !";
}
}
创建后,运行 WEB 模块的 Application 类,启动 SpringBoot 服务,在浏览器查看http://127.0.0.1:8080/demo/hi
成功!
创建一个空模块,并填写功能代码
这回,不再是通过Spring Initializr
创建了,而是选择 Maven 工程。
Parent 工程选在 root 。
M1 模块的 pom.xml 文件如下:
<?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">
<parent>
<artifactId>root</artifactId>
<groupId>com.aclyyx.multi</groupId>
<version>1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>multi-module1</artifactId>
</project>
测试模块可用性 2
在 M1 模块创建 Java 包名:com.aclyyx.multi.m1
;
新建一个常量类,如下:
package com.aclyyx.multi.m1;
public interface M1Constants {
public final static String M1_HI = "M1 say HI !";
}
在 WEB 模块的 pom.xml 中添加对 M1 的依赖
<!-- 对 M1 模块的依赖关系 -->
<dependencies>
<dependency>
<groupId>com.aclyyx.multi</groupId>
<artifactId>multi-module1</artifactId>
<version>1</version>
</dependency>
</dependencies>
修改 DemoController
的返回信息,如下:
import com.aclyyx.multi.m1.M1Constants;
@RestController
@RequestMapping("demo")
public class DemoController {
@GetMapping("hi")
public String hi() {
// 返回在 M1 模块中定义的常量
return M1Constants.M1_HI;
}
}
启动服务查看结果。
配置 Spring boot 模块
现在虽然可以引用一个项目中不同模块的类了,但 spring boot 的模块还是不可以扫描到的,这里需要在启动类上通过注解添加扫描位置:@ComponentScan
@SpringBootApplication
@ComponentScan(basePackages = "com.aclyyx.multi")
public class MultiWebApplication {
public static void main(String[] args) {
SpringApplication.run(MultiWebApplication.class, args);
}
}
测试模块可用性 3
在 M1 模块添加 Controller 类并重启查看效果。
Controller 代码:
@RestController
@RequestMapping("m1")
public class M1DemoController {
@GetMapping("hi")
public String hi() {
return M1Constants.HI_IN_M1;
}
}
效果:
参考
Maven学习 搭建多模块企业级项目 maven工程下包含多个maven工程
springboot多模块依赖注入,访问controller时404问题
java – SpringBoot ComponentScan与多模块项目有关
SpringBoot安全管理--(一)SpringSecurity基本配置
- 0
- 0
-
分享