您當前的位置:首頁 > 遊戲

SpringBoot+Gradle構建多模組專案

作者:由 kgkdfgjdfgdf 發表于 遊戲時間:2021-03-02

1 概述

Gradle

由於構建速度比

Maven

快,且比

Maven

靈活,因此很多後端的應用都使用了

Gradle

進行構建,但一個問題是,

Gradle

的多模組專案比較難構建,再加上

Gradle

的更新非常快,這就給構建一個多模組

Gradle

專案造成了不少的困難。

基於此出發點,本文提供了兩種形式的使用

Gradle

構建的

Spring Boot

多模組專案:

Java + Gradle

Kotlin + Gradle + Kotlin DSL

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

2 環境

Gradle 7。4

Spring Boot 2。6。4

Kotlin 1。6。10

OpenJDK 17

3

Java + Gradle

主要步驟:

使用

Spring Initializer

建立專案

修改

build。gradle

建立模組

編寫模組

執行

測試

3。1 建立專案

直接使用

IDEA

提供的

Spring Initializer

即可,構建工具選擇

Gradle

SpringBoot+Gradle構建多模組專案

依賴:

SpringBoot+Gradle構建多模組專案

構建完成後刪除src目錄

,因為根目錄屬於管理模組目錄不提供執行的應用:

SpringBoot+Gradle構建多模組專案

3。2 修改

build。gradle

這是最複雜的一步,並且

Gradle

版本更新的話步驟可能會不一樣,

首先在底部新增一個空的subprojects

SpringBoot+Gradle構建多模組專案

接著

把dependencies以及tasks.name('test')移動進去

SpringBoot+Gradle構建多模組專案

最後一步是,

在subprojects開頭,新增外掛apply,根據預設初始化建立的plugins,逐一新增

比如這裡預設使用了三個外掛:

SpringBoot+Gradle構建多模組專案

apply

subprojects

中:

SpringBoot+Gradle構建多模組專案

3。3 建立模組

File -> New -> Module

SpringBoot+Gradle構建多模組專案

輸入模組名即可,這裡的例子是建立兩個模組:

service

app

SpringBoot+Gradle構建多模組專案

SpringBoot+Gradle構建多模組專案

建立好後如圖所示:

SpringBoot+Gradle構建多模組專案

完成建立之後,

把兩個模組中的build.gradle除了repositories之外的全部刪去

,僅保留

repositories

SpringBoot+Gradle構建多模組專案

3。4 編寫模組

3。4。1

service

模組

首先

建立包

,根據根目錄中的

build。gradle

中的

group

建立:

SpringBoot+Gradle構建多模組專案

SpringBoot+Gradle構建多模組專案

接著編寫一個叫

TestService

的帶

@Service

註解的類,裡面包含一個

test

方法:

SpringBoot+Gradle構建多模組專案

同時修改

service

模組的

build。gradle

新增bootJar以及jar選項

bootJar

{

enabled

=

false

}

jar

{

enabled

=

true

}

SpringBoot+Gradle構建多模組專案

3。4。2

app

模組

同樣先

建立包

SpringBoot+Gradle構建多模組專案

接著在

app

模組的

build。gradle

新增service模組的依賴

SpringBoot+Gradle構建多模組專案

再建立啟動類以及一個

Controller

SpringBoot+Gradle構建多模組專案

程式碼如下:

package

com。example。app

import

org。springframework。boot。SpringApplication

import

org。springframework。boot。autoconfigure。SpringBootApplication

@SpringBootApplication

scanBasePackages

=

“com。example”

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

();

}

}

注意,

因為Spring Boot無法自動識別其他模組下的類,所以需要手動處理一下,有三種方法

第一種:

使用@Import

,也就是

@Import(TestService。class)

第二種:

使用scanBasePackageClasses

,也就是

@SpringBootApplication(scanBasePackageClasses={TestService。class})

第三種:

使用scanBasePackages

,也就是例子中的程式碼

@SpringBootApplication(scanBasePackages = “com。example”)

3。5 執行

接下來就可以運行了,可以直接點選

Application

旁邊的綠色小三角:

SpringBoot+Gradle構建多模組專案

或者從執行配置中選擇

Application

執行(

IDEA

自動建立的,原來的那個

JavaGradleApplication

帶一個×是因為啟動檔案已經刪除了,可以順便把該配置刪除):

SpringBoot+Gradle構建多模組專案

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

SpringBoot+Gradle構建多模組專案

同時瀏覽器訪問

localhost:8080/test

會出現

test

字樣:

SpringBoot+Gradle構建多模組專案

3。6 測試

建立包和測試類:

SpringBoot+Gradle構建多模組專案

package

com。example。test

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

classes

=

TestService

class

//需要引入對應的類

public

class

JavaGradleTest

{

@Autowired

private

TestService

service

@Test

public

void

test

()

{

System

out

println

service

test

());

}

}

接著進行測試:

SpringBoot+Gradle構建多模組專案

當然測試也可以跑一下

Gradle

中的任務:

SpringBoot+Gradle構建多模組專案

3。7 打包

打包的話直接執行

bootJar

即可:

SpringBoot+Gradle構建多模組專案

會在

build/libs

下生成

JAR

包:

SpringBoot+Gradle構建多模組專案

測試:

SpringBoot+Gradle構建多模組專案

SpringBoot+Gradle構建多模組專案

再次訪問

localhost:8080/test

沒有問題。

這樣使用

Java

+

Gradle

構建一個多模組的

Spring Boot

專案就成功了。

4

Kotlin + Gradle + Kotlin DSL

Kotlin DSL

在原生

Gradle

Groovy DSL

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

使用

Spring Initializer

建立專案

修改

build。gradle。kts

建立模組

編寫模組

執行

測試

4。1 建立專案

選擇

Kotlin

+

Gradle

SpringBoot+Gradle構建多模組專案

依賴:

SpringBoot+Gradle構建多模組專案

同樣

刪除src

SpringBoot+Gradle構建多模組專案

4。2 修改

build。gradle。kts

同樣在尾部

新增一個空的subprojects

SpringBoot+Gradle構建多模組專案

把dependencies以及tasks移動進去

SpringBoot+Gradle構建多模組專案

最後

在subprojects開始處apply外掛

根據預設的外掛進行apply

SpringBoot+Gradle構建多模組專案

程式碼如下:

apply

{

plugin

“org。springframework。boot”

plugin

“io。spring。dependency-management”

plugin

“org。jetbrains。kotlin。jvm”

plugin

“org。jetbrains。kotlin。plugin。spring”

}

plugins中的kotlin是org.jetbrains.kotlin的簡寫

,在

subprjects

中注意加上即可。

4。3 建立模組

File -> New -> Module

,把一些必要選項勾選上:

SpringBoot+Gradle構建多模組專案

這裡同樣建立兩個模組:

service

app

SpringBoot+Gradle構建多模組專案

SpringBoot+Gradle構建多模組專案

同樣把兩個模組中的

build.gradle.kts刪除其他部分留下repositories

SpringBoot+Gradle構建多模組專案

4。4 編寫模組

4。4。1

service

模組

首先根據根目錄的

build。gradle。kts

建立包

SpringBoot+Gradle構建多模組專案

SpringBoot+Gradle構建多模組專案

編寫

TestService

SpringBoot+Gradle構建多模組專案

最後修改

build。gradle。kts

加上tasks.bootJar與tasks.jar

tasks。bootJar

{

enabled

=

false

}

tasks。jar

{

enabled

=

true

}

SpringBoot+Gradle構建多模組專案

4。4。2

app

模組

建立包

SpringBoot+Gradle構建多模組專案

新增對service模組的依賴

SpringBoot+Gradle構建多模組專案

再建立一個啟動類以及一個

Controller

SpringBoot+Gradle構建多模組專案

程式碼如下:

package

com。example。app

import

org。springframework。boot。SpringApplication

import

org。springframework。boot。autoconfigure。SpringBootApplication

@SpringBootApplication

scanBasePackages

=

“com。example”

])

class

Application

fun

main

args

Array

<

String

>)

{

SpringApplication

run

Application

::

class

java

,*

args

}

package

com。example。app。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

旁邊的綠色小三角即可:

SpringBoot+Gradle構建多模組專案

執行成功:

SpringBoot+Gradle構建多模組專案

同樣可以訪問

localhost:8080/test

SpringBoot+Gradle構建多模組專案

4。6 測試

建立包與測試類:

SpringBoot+Gradle構建多模組專案

package

com。example。test

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

classes

=

TestService

::

class

])

class

KotlinTest

{

@Autowired

lateinit

var

service

TestService

@Test

fun

test

()

{

println

service

test

())

}

}

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

SpringBoot+Gradle構建多模組專案

測試透過。

4。7 打包

bootJar

即可:

SpringBoot+Gradle構建多模組專案

同樣會在

libs

下生成

JAR

SpringBoot+Gradle構建多模組專案

執行測試後沒有問題,這樣

Kotlin+Gradle+Kotlin DSL

的多模組

Spring Boot

專案就算建立完成了。

5 原始碼

附上兩個例子的原始碼:

Github

碼雲

GitCode

標簽: 模組  Gradle  test  springframework  建立