SpringBoot+Gradle構建多模塊項目


1 概述

Gradle由於構建速度比Maven快,且比Maven靈活,因此很多后端的應用都使用了Gradle進行構建,但一個問題是,Gradle的多模塊項目比較難構建,再加上Gradle的更新非常快,這就給構建一個多模塊Gradle項目造成了不少的困難。

基於此出發點,本文提供了兩種形式的使用Gradle構建的Spring Boot多模塊項目:

  • Java + Gradle
  • Kotlin + Gradle + Kotlin DSL

為了減少出現各種錯誤的概率,步驟做得非常詳細(多圖預警),文末也附上了源碼,下面就一起來看看吧。

2 環境

  • Gradle 6.8.2
  • Spring Boot 2.4.3
  • Kotlin 1.4.30
  • Open JDK 11

3 Java + Gradle

主要步驟:

  • 使用Spring Initializer創建項目
  • 修改build.gradle
  • 創建模塊
  • 編寫模塊
  • 運行
  • 測試

3.1 創建項目

直接使用IDEA提供的Spring Initializer即可,構建工具選擇Gradle

在這里插入圖片描述

依賴:

在這里插入圖片描述

構建完成后刪除src目錄,因為根目錄屬於管理模塊目錄不提供運行的應用:

在這里插入圖片描述

3.2 修改build.gradle

這是最復雜的一步,並且Gradle版本更新的話步驟可能會不一樣,首先在底部添加一個空的subprojects

在這里插入圖片描述

接着dependencies以及test移動進去

在這里插入圖片描述

最后一步是,subprojects開頭,添加插件apply,根據默認初始化創建的plugins,逐一添加

比如這里默認使用了三個插件:

在這里插入圖片描述

applysubprojects中:

在這里插入圖片描述

3.3 創建模塊

File -> New -> Module

在這里插入圖片描述

輸入模塊名即可,這里的例子是創建兩個模塊:

  • service
  • app

在這里插入圖片描述

在這里插入圖片描述

創建好后如圖所示:

在這里插入圖片描述

完成創建之后,把兩個模塊中的build.gradle除了repositories之外的全部刪去,僅保留repositories

在這里插入圖片描述

在這里插入圖片描述

3.4 編寫模塊

3.4.1 service模塊

首先創建包,根據根目錄中的group創建:

在這里插入圖片描述

在這里插入圖片描述

接着編寫一個叫TestService的帶@Service注解的類,里面包含一個test方法:

在這里插入圖片描述

同時修改service模塊的build.gradle添加bootJar以及jar選項

bootJar{
    enabled = false
}

jar{
    enabled = true
}

在這里插入圖片描述

3.4.2 app模塊

同樣先根據根目錄的group創建包

在這里插入圖片描述

接着在app模塊的build.gradle添加service模塊的依賴

在這里插入圖片描述

再創建啟動類以及一個Controller

在這里插入圖片描述

代碼如下:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}
package com.example.controller;

import com.example.service.TestService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {
    private final TestService service;
    @GetMapping("/test")
    public String test(){
        return service.test();
    }
}

3.5 運行

接下來就可以運行了,可以直接點擊Application旁邊的綠色小三角:

在這里插入圖片描述

或者從運行配置中選擇Application運行(IDEA自動創建的,原來的那個DemoApplication帶一個×是因為啟動文件已經刪除了,可以順便把該配置刪除):

在這里插入圖片描述

沒問題的話就可以成功運行了:

在這里插入圖片描述

同時瀏覽器訪問localhost:8080/test會出現test字樣:

在這里插入圖片描述

3.6 測試

在創建測試類之前,也需要先創建包,且需要確保包名與啟動類的包名一致

在這里插入圖片描述

再創建測試類:

在這里插入圖片描述

package com.example;

import com.example.service.TestService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class JavaTest {
    @Autowired
    private TestService service;
    @Test
    public void test(){
        System.out.println(service.test());
    }
}

接着進行測試:

在這里插入圖片描述

這樣使用Java+Gradle構建一個多模塊的Spring Boot項目就成功了。

4 Kotlin + Gradle + Kotlin DSL

Kotlin DSL在原生GradleGroovy DSL)的基礎上進行改進,但同時語法也變得更加陌生,難度因此也加大了不少,不過這並沒有難倒筆者。構建多模塊的基本步驟與上面類似:

  • 使用Spring Initializer創建項目
  • 修改build.gradle.kts
  • 創建模塊
  • 編寫模塊
  • 運行
  • 測試

4.1 創建項目

選擇Kotlin+Gradle

在這里插入圖片描述

依賴:

在這里插入圖片描述

同樣刪除src

在這里插入圖片描述

4.2 修改build.gradle.kts

同樣在尾部添加一個空的subprojects

在這里插入圖片描述

dependencies以及tasks移動進去

在這里插入圖片描述

在這里插入圖片描述

最后subprojects開始處apply插件根據默認的插件進行apply

在這里插入圖片描述

代碼如下:

apply{
    plugin("io.spring.dependency-management")
    plugin("org.springframework.boot")
    plugin("org.jetbrains.kotlin.plugin.spring")
    plugin("org.jetbrains.kotlin.jvm")
}

plugins中的kotlinorg.jetbrains.kotlin的簡寫,在subprjects中注意加上即可。

4.3 創建模塊

File -> New -> Module,把一些必要選項勾選上:

在這里插入圖片描述

這里同樣創建兩個模塊:

  • app
  • service

在這里插入圖片描述

在這里插入圖片描述

同樣把兩個模塊中的build.gradle.kts刪除其他部分留下repositories

在這里插入圖片描述

4.4 編寫模塊

4.4.1 service模塊

首先根據根目錄的build.gradle.kts創建包

在這里插入圖片描述

在這里插入圖片描述

編寫TestService

在這里插入圖片描述

最后修改build.gradle.kts加上tasks.bootJartasks.jar

tasks.bootJar{
    enabled = false
}

tasks.jar{
    enabled = true
}

在這里插入圖片描述

4.4.2 app模塊

創建包

在這里插入圖片描述

添加對service模塊的依賴

在這里插入圖片描述

再創建一個啟動類以及一個Controller

在這里插入圖片描述

代碼如下:

package com.example

import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication

@SpringBootApplication
class Application

fun main(args:Array<String>) {
    SpringApplication.run(Application::class.java,*args)
}
package com.example.controller

import com.example.service.TestService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class TestController {
    @Autowired
    lateinit var service: TestService
    @GetMapping("/test")
    fun test() = service.test()
}

4.5 運行

點擊main旁邊的綠色小三角即可:

在這里插入圖片描述

運行成功:

在這里插入圖片描述

同樣可以訪問localhost:8080/test

在這里插入圖片描述

4.6 測試

注意在編寫測試之前需要保證測試類與啟動類在同一個包下,也就是需要先創建包

在這里插入圖片描述

再創建測試類:

在這里插入圖片描述

package com.example

import com.example.service.TestService
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest

@SpringBootTest
class KotlinTest {
    @Autowired
    lateinit var service: TestService
    @Test
    fun test(){
        println(service.test())
    }
}

直接點擊小三角測試即可:

在這里插入圖片描述

測試通過,這樣Kotlin+Gradle+Kotlin DSL的多模塊Spring Boot項目就算創建完成了。

5 總結

筆者在實踐的過程中也遇到了無數的錯誤,比如找不到類,或者build.gradle/build.gradle.kts文件錯誤,幸好有萬能的搜索引擎,幫筆者解決了錯誤,最后才成功寫下這篇文章。

總的來說,Gradle創建多模塊項目要比Maven要難,而且Gradle的更新速度很快,語法變化較大,相比之下Maven非常穩定,最新的Maven 3.6.3還是19年11月發布的,然而Gradle都准備7.0了:

在這里插入圖片描述

在這里插入圖片描述

筆者建議,如果是真的需要使用Gradle,需要考慮一下團隊的狀況,畢竟上手難度要大於Maven,如果在Gradle創建多模塊的過程中遇到一些極其難以解決的問題,轉為Maven不失為一個好辦法。

6 源碼

附上兩個例子的源碼:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM