Idea 創建簡單的SpringBoot 父子項目

背景

使用Idea 創建一個模塊化的SpringBoot項目,但是發現Idea 創建父子項目的方式較Eclipse 較爲不同,且Idea 創建的過程較Eclipse創建父子項目的過程複雜。
Eclipse 創建SpringBoot父子項目傳送門

網上雖然有Idea創建SpringBoot父子項目,但是攜帶各種其他的功能,導致無法簡單的搞懂如何創建。下面就一個例子進行說明一下。

構建簡單SpringBoot父子項目

環境說明:jdk1.8
Idea 版本:2019.3
(1)打開Idea,如果是新安裝的軟件,不會有歷史項目
在這裏插入圖片描述
(2)點擊 “Create New Project”,進入一個新的項目的創建界面。父項目直接創建一個Maven項目即可
在這裏插入圖片描述
PS:不要勾選 “Create from archetype”
點擊下一步。
(3)進入父項目的創建頁面,填寫項目名稱和GoupId與座標
在這裏插入圖片描述
PS:可以在上圖紅圈標註的地方修改項目的地址
(4)點擊Finish 按鈕,完成一個父項目的創建。
下圖是點擊Finish 創建好的項目在Idea 軟件中打開的情況:
在這裏插入圖片描述
(5)在現有父項目的基礎上新建SpringBoot子項目
在父項目的名稱的位置右鍵鼠標:
在這裏插入圖片描述
(6)新建一個Module,進入新建頁面。
子項目直接選擇Spring initializr,創建一個SpringBoot項目
在這裏插入圖片描述
點擊下一步,進入子項目的具體構建內容。
在這裏插入圖片描述
填寫座標後,點擊下一步。
(7)進入新建項目選擇插件,由於我們測試需要,所以直接簡單的選擇了web
在這裏插入圖片描述
點擊下一步,可以更改項目名稱和地址
在這裏插入圖片描述
可以看出,子項目的地址默認在父項目文件夾下。點擊Finish完成子項目的創建。
(8)可以刪除一些子項目不需要的文件,不刪也行
在這裏插入圖片描述
P: 還有父項目的src文件夾,這個已經不需要了,所以可以直接刪除

(9)經過 1-8 步的操作,我們創建了父子項目結構,但是這兩個項目尚未實現父子關係。下面我們需要更改POM文件,來實現父子關係。
在這裏插入圖片描述
這裏我們先粘貼出還沒有改變關係之前的父子結構項目原有的POM 文件

  • 父項目:
<?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>com.codingdemo</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>
  • 子項目
<?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.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.codingdemo</groupId>
    <artifactId>springboot-demo-redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo-redis</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(10)首先將你認爲子項目中是公共的部分拿到父項目中,包括spring-boot-starter-parent 和一些 properties 以及build 等公共配置

<!--1 -->
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<!--2 -->
<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
<!--3-->
<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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

上面子項目中的配置文件都可以拿到父項目的POM文件中 。
(11)將父項目的座標,複製到 子項目的父座標中

	<parent>
        <groupId>com.codingdemo</groupId>
        <artifactId>springboot-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

(12) 父項目 新增 <packaging>pom</packaging>
P:這個必須
在這裏插入圖片描述
(13)將子項目的moudle 關聯到 父項目中

  <modules>
        <module>springboot-demo-redis</module>
    </modules>

在這裏插入圖片描述
(14)我們再來看下新的父子項目的 POM文件

  • 父項目
<?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.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.codingdemo</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>springboot-demo-redis</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 子項目
<?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>com.codingdemo</groupId>
        <artifactId>springboot-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.codingdemo</groupId>
    <artifactId>springboot-demo-redis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo-redis</name>
    <description>Demo project for Spring Boot</description>

</project>

讀者可以對比一下,沒有改造之前的POM文件,有什麼差距
(15) 我們來驗證一下,父子項目是否成功創建
我們在子項目中新增一個Controller ,進行一下簡單Web訪問,查看是否成功
在這裏插入圖片描述

package com.codingdemo.springbootdemoredis.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello world!";
    }
}

啓動一下SpringBoot 啓動類,輸入網址
在這裏插入圖片描述
可以看到能夠成功訪問,我們已經成功搭建好簡單的父子SpringBoot項目
(16) 如果我修改 Controller的方法,需要重啓項目,這樣比較麻煩。下面是如何配置熱部署SpringBoot項目

SpringBoot項目的熱部署

(1)在上面現有的父子SpringBoot項目中,在父項目POM文件增加熱部署的devtools依賴。

<!-- 熱加載 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
        <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--熱加載必須配上以下內容-->
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

(2) 我們可以在配置文件中設置devtools

### 熱部署配置
spring.devtools.restart.enabled=true 
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.poll-interval=1s
spring.freemarker.cache=false

(3)如果修改了Controller的函數但是還是沒有熱加載,可能是由於你是新的項目需要設置開啓自動編譯
在這裏插入圖片描述
P:勾上
重啓項目後,然後再次修改文件後,便可以看到開始熱部署了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章