傻瓜式学习⭐在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 文件

  1. 需要新加一个 modules 标签
  2. 添加打包方式为 pom
  3. 并新增一个 parent 标签
  4. 添加 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 文件

  1. 需要更改其 parent 标签为其父工程
  2. 添加打包方式为 jar
  3. 删除依赖包(继承夫父工程的依赖包)

完整的 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>

在这里插入图片描述
子工程中也会有。

欢迎留言!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值