如果想要将现有的Spring Boot转为多模块,

这次需要做的事情

我想要将已存在的Spring Boot项目改造为多模块管理的形式。

    • root モジュールには、kotlinなどの言語・フレームワークを管理

 

    サブモジュール別でライブラリ等を自分で管理できるようにする

最终目标

    • サブモジュールで Bootrun できる

API 実行後、指定の返り値が返ってくること

请注意

    • 意味や解釈を間違えている可能性があります・・・?(調べてから記載はしてはいるのですが・・・)

ご指摘していただけるとありがたいです

前提

    すでに spring initializr で 作成後、bootRun で起動ができる
. (rootモジュール)
| - build.gradle.kts
| - settings.gradle.kts
| - src...
ライブラリバージョンspring boot2.5.13kotlin1.5.32Gradle7.4.1

实践

请确认根目录下的 “build.gradle.kts” 文件。

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
	id("org.springframework.boot") version "2.5.13"
	id("io.spring.dependency-management") version "1.0.11.RELEASE"
	kotlin("jvm") version "1.5.32"
	kotlin("plugin.spring") version "1.5.32"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
	mavenCentral()
}

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
	kotlinOptions {
		freeCompilerArgs = listOf("-Xjsr305=strict")
		jvmTarget = "11"
	}
}

tasks.withType<Test> {
	useJUnitPlatform()
}


2. 创建用于多模块化的基础结构(子模块名称为「sample-todo」)。

创建一个新的模块和 build.gradle.kts 文件。

. (rootモジュール)
| - build.gradle.kts
| - settings.gradle.kts
| - sample-todo // 新しく作成
  | - build.gradle.kts // 新しく作成

在root模块的”build.gradle.kts”文件中写下2 – 2的内容。

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
	id("org.springframework.boot") version "2.5.13"
	id("io.spring.dependency-management") version "1.0.11.RELEASE"
	kotlin("jvm") version "1.5.32"
	kotlin("plugin.spring") version "1.5.32"
}

// 全てのモジュールに対して適用する依存関係等を指定することができる
allprojects {
	group = "com.example"
	version = "0.0.1-SNAPSHOT"

	// 依存関係を取得することができる?
	// これがないと、起動できない
	repositories {
		mavenCentral()
	}

	tasks.withType<KotlinCompile> {
		kotlinOptions {
			freeCompilerArgs = listOf("-Xjsr305=strict")
			jvmTarget = "11"
		}
	}

	tasks.withType<Test> {
		useJUnitPlatform()
	}
}

// サブモジュールで使用する共通の依存関係を指定できる
subprojects {
    apply {
		plugin("java")
		plugin("kotlin")
		plugin("io.spring.dependency-management")
		plugin("org.jetbrains.kotlin.jvm")
		plugin("org.jetbrains.kotlin.plugin.spring")
	}

    java.sourceCompatibility = JavaVersion.VERSION_11

	dependencies {
		implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
		implementation("org.jetbrains.kotlin:kotlin-reflect")
		implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	}
}

在root模块的”settings.gradle.kts”文件中记录。

rootProject.name = "root モジュール名"
include("sample-todo") // <- サブモジュールを追加

2-4. 在 “build.gradle.kts” 文件中的 sample-todo 模块中进行记录。

// Spring bootを導入する
plugins {
    id("org.springframework.boot")
}

// web サービスを使う上での最低限の依存関係を入れる
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

将其转化为相应的中文语句:
2 – 5. 创建如下所示的目录结构。

sample-todo
├── build.gradle.kts
└── src
    ├── main
    │   └── kotlin
    │       └── com
    │           └── example
    │               └── sampleTodo
    │                   └── SampleTodoApplication.kt
    └── test
        └── kotlin

将SampleTodoApplication.kt以如下方式进行编写

package com.example.sampleTodo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class SampleTodoApplication

fun main(args: Array<String>) {
    runApplication<SampleTodoApplication>(*args)
}

尝试执行「Bootrun」(仅启动,其他功能不可用)。

删除root模块中”src”文件夹下的所有子目录。

. root モジュール
└── src(ここから下のファイルは削除して良い)
     ├── main
     │   ├── kotlin
     │   │   └── com
     │   │       └── example
     │   │           └── ...
     │   └── resources
     └── test
          └── kotlin
               └── com
                    └── ....

3. API的创建和执行

src
 ├── main
 │   └── kotlin
 │       └── com
 │           └── example
 │               └── sampleTodo
 │                   ├── SampleTodoApplication.kt
 │                   └── controller
 │                       └── SampleController.kt (新しく作成)
 └── test
      └── kotlin

package com.example.sampleTodo.controller

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

@RestController
class SampleController(){
    @GetMapping
    fun get(): String {
        return "OK"
    }
}

如果使用能够调用 API 的工具或命令进行执行,并显示以下值,则结束。

    • HTTPステータス「200」

 

    「OK」の文字列が表示される

还有其他的人。。。

如果想要使用与根模块指定版本不同的版本

在根模块的 “build.gradle.kts” 中进行了记录。

plugins {
  id("org.springframework.boot") version "2.4.5" apply false
}

通过添加false来声明”此插件不适用于rootProjects”

请提供相关的参考资料。

    • https://kazamori.jp/blogs/2020/06/30/gradle-multi-project/

 

    • https://it-blue-collar-dairy.com/springboot_multi-project_sample/

 

    • https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:dependencies_which_dependencies

 

    • https://qiita.com/BooookStore/items/695b199a5d13f633a2dc

 

    https://qiita.com/k-okajima/items/ca29e2956a03c5768747
广告
将在 10 秒后关闭
bannerAds