🟢

Kotlin × Spring Bootでサーバー実装するための環境構築

2024/06/01に公開

参考文献

環境

タイトル 内容
macOS Sonoma 14.4.1(M1)

手順

1. Spring Initializrの設定

2. build.gradleの実装

plugins {
    id("org.springframework.boot") version "2.1.6.RELEASE"
    id("org.jetbrains.kotlin.jvm") version "1.3.21"
    id("org.jetbrains.kotlin.plugin.spring") version "1.3.21"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    id("com.google.protobuf") version "0.8.19" // Protocol Buffersを扱うためのプラグイン
    id("java")
    id("idea")
}

sourceSets {
    main {
        proto {
            srcDir 'src/main/protobuf'
        }

        java {
            srcDirs 'src/main/generated'
        }
    }
}

group = "com.example.grpc.kotlin"
version = "0.0.1-SNAPSHOT"
sourceCompatibility = JavaVersion.VERSION_1_8

def grpcVersion = "1.21.0"

repositories {
    mavenCentral()
    maven { url = uri("https://repo.spring.io/milestone") }
    maven { url = uri("https://repo.spring.io/snapshot") }
}

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")
    compile("io.github.lognet:grpc-spring-boot-starter:3.3.0") // gRPCをSpring Bootで扱うためのStarter
    testImplementation("org.springframework.boot:spring-boot-starter-test")

}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.5.1-1"
    }

    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }

    generateProtoTasks {
        all().each { task ->
            task.builtins {
                // Protocol Buffers関連のファイル出力先
                java {
                    outputSubDir = "generated"
                }
            }
            task.plugins {
                // gRPC関連のファイル出力先
                grpc {
                    outputSubDir = "generated"
                }
            }
        }
    }

    generatedFilesBaseDir = "$projectDir/src/"
}

clean {
    delete "$protobuf.generatedFilesBaseDir/main/generated"
}

一応クイックスタートを試した。

※ポートが既に使われている場合は変更しないといけない(50051)

Discussion