SpringBoot+Gradle構建多模塊項目

1 概述

Gradle因爲構建速度比Maven快,且比Maven靈活,所以不少後端的應用都使用了Gradle進行構建,但一個問題是,Gradle的多模塊項目比較難構建,再加上Gradle的更新很是快,這就給構建一個多模塊Gradle項目形成了很多的困難。java

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

  • Java + Gradle
  • Kotlin + Gradle + Kotlin DSL

爲了減小出現各類錯誤的機率,步驟作得很是詳細(多圖預警),文末也附上了源碼,下面就一塊兒來看看吧。github

2 環境

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

3 Java + Gradle

主要步驟:web

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

3.1 建立項目

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

在這裏插入圖片描述

依賴:後端

在這裏插入圖片描述

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

在這裏插入圖片描述

3.2 修改build.gradle

這是最複雜的一步,而且Gradle版本更新的話步驟可能會不同,首先在底部添加一個空的subprojects瀏覽器

在這裏插入圖片描述

接着dependencies以及test移動進去bash

在這裏插入圖片描述

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

好比這裏默認使用了三個插件:

在這裏插入圖片描述

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 源碼

附上兩個例子的源碼:

相關文章
相關標籤/搜索