傻瓜式学习⭐在IDEA中创建多模块父子工程⭐
作者:互联网
在IDEA中创建多模块父子工程
一、为什么要创建多模块化工程
大家都知道 Web 工程是 MVC 三层架构,并且在系统中一般会有前台和后台这种两个登录入口的存在。
这种情况一般都是用户前台登录,管理员后台登陆用来查看系统的信息以及系统的维护。
所以这便会有两个 View (视图)层,对应着便会有两个Conatroller(控制)层。
我们抛开 View 不谈,这是前端做的东西,那这时后端便对应这几个架构层:前台控制层(Manager)、后台控制层(Controller)、服务层(Service)以及数据层(Dao);
其中控制层分别用不同的接口,但是服务层以及数据层却用的是同一个。
在 Java 的结构中有着 “高内聚,低耦合” 的设计原则。那上述这个明显是不符合的,虽然说通过包名划分了层次,但是对于架构层次来说,所有东西都被耦合在一起了。因此我们需要进行多模块划分工程。
一个多层次划分的结构应该设这样的:
---- app-xxx
|-- app-controller
| |-- pom.xml (jar)
|
|-- app-Manager
| |-- pom.xml (jar)
|
|-- app-Service
| |-- pom.xml (jar)
|
|-- app-Dao
| |-- pom.xml (jar)
|
|-- pom.xml (war)
上述中,app-controller、app-Manager、app-Service、app-Dao 分别是不同的架构层,其中 app-controller、app-Service、app-Dao 构成一套服务,app-Manager、app-Service、app-Dao 也构成一套服务。很明显 app-controller 与 app-Manager 共用一套 app-Service 与 app-Dao。
二、Maven创建多模块父子项目
在上一篇博客中一个文件承载多个项目时,是创建了一个空项目来承载的,在本篇是多模块的父子工程,多个模块相互之间有联系,采用的是 Maven 来承载我们多个模块的。
1、创建父工程(Maven 项目)
之后我们点击 Next 创建 maven 项目。
这里我们就创建好 maven 项目了,结构如下:
我们要对其进行处理!
删除 src 文件,src 文件是保存源代码的,可是我们的多模块的代码存放在多个架构层中,所以不需要这个 src 来存放代码。更改图如下:
2、创建子工程(Maven 项目)
刚开始 New 一个 Moudle 。
点击 Next 即可。
创建的是 Spring Web 项目,选中 Finish 完成创建。
启动 SpringBoot ,测试!
成功,架构层架构如下。
另外,最外层的 maven 项目中的 pom.xml 文件
- 需要新加一个 modules 标签
- 添加打包方式为 pom
- 并新增一个 parent 标签
- 添加 springboot 依赖包。
完整的 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
<module>springbootManager</module>
</modules>
<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>
<groupId>org.wang</groupId>
<artifactId>maven-moremodule</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
而对于子工程中的 .xml 文件
- 需要更改其 parent 标签为其父工程
- 添加打包方式为 jar
- 删除依赖包(继承夫父工程的依赖包)
完整的 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>
<parent>
<groupId>org.wang</groupId>
<artifactId>maven-moremodule</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>jar</packaging>
<groupId>com.wang</groupId>
<artifactId>springbootManager</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootManager</name>
<description>springbootManager</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
再次启动测试 Manager;
可以正常启动,可以证明继承了父工程的依赖。
再以相同的方法创建三个架构层,分别是:Controller、Service、Dao 。架构层架构如下:
我们可以先删除 springboot 中不影响项目的文件。
这些都是可以删除的,有的项目有一个 .iml 文件,这个是不能删除的,我的项目创建之后就没有这个文件。
文件结构如下:
干净,接下来修改 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
<module>springbootManager</module>
<module>springbootController</module>
<module>springbootService</module>
<module>springbootDao</module>
</modules>
<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>
<groupId>org.wang</groupId>
<artifactId>maven-moremodule</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
子工程的文件和 Manager 层的文件相同,下面只给出 Dao 层的文件。
<?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>
<parent>
<groupId>org.wang</groupId>
<artifactId>maven-moremodule</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>jar</packaging>
<groupId>com.wang</groupId>
<artifactId>springbootDao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootDao</name>
<description>springbootDao</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们可以每层都分别测试,是否继承了父项目。在测试之前,要先关闭上一次测试的项目,都是会出现端口被占用的错误。
接口调用,Controller 层需要调用 Service 层的方法。
在 Controller 层导入Service 层。
<dependencies>
<dependency>
<groupId>com.wang</groupId>
<artifactId>springbootService</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
编写 Service 方法:
编写 Controller 层的方法,调用 Service 层的方法:
这块有的同学不能引入 Service 层中的类,麻烦把 Maven 进行配置。
package com.wang.controller;
import com.wang.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@Autowired
HelloService helloService;
@RequestMapping("hello")
@ResponseBody
public String hello() {
return helloService.hello();
}
}
调用进行测试:
启动 Controller 层中的启动类。
成功,这下我们可以对工程进行模块解耦。
另外,父工程导入的依赖,子工程可以继承。
父工程导入 lombok 依赖包。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<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>
子工程中也会有。
欢迎留言!!!
标签:Service,app,傻瓜式,boot,IDEA,springframework,pom,模块,org 来源: https://blog.csdn.net/wyw15667121424/article/details/119985302