Home 멀티모듈 코프링과 플러그인
Post
Cancel

멀티모듈 코프링과 플러그인

루트.build.gradle.kts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
	id("org.springframework.boot") version "3.0.5"
	id("io.spring.dependency-management") version "1.1.0"
	id("org.asciidoctor.jvm.convert") version "3.3.2"
	kotlin("jvm") version "1.7.22"
	kotlin("plugin.spring") version "1.7.22"
	kotlin("plugin.jpa") version "1.7.22"
	kotlin("kapt") version "1.6.21"
}

java.sourceCompatibility = JavaVersion.VERSION_17

allprojects {
	group = "com.mashup"
	version = "0.0.1-SNAPSHOT"

	repositories {
		mavenCentral()
	}
}

subprojects {
	apply(plugin = "org.jetbrains.kotlin.jvm")
	apply(plugin = "org.jetbrains.kotlin.plugin.spring")
	apply(plugin = "org.springframework.boot")
	apply(plugin = "kotlin")
	apply(plugin = "java-library")
	apply(plugin = "kotlin-jpa")
	apply(plugin = "io.spring.dependency-management")
	apply(plugin = "org.asciidoctor.jvm.convert")
	apply(plugin = "kotlin-kapt")

	dependencies {
		implementation("org.springframework.boot:spring-boot-starter-web")
		implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
		implementation("io.github.microutils:kotlin-logging:2.0.8")

		implementation("org.jetbrains.kotlin:kotlin-reflect")
		testImplementation("org.springframework.boot:spring-boot-starter-test")
	}

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

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

plugins 코드블럭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
plugins {

    // 스프링 부트 프레임워크를 사용할 때 필요한 플러그인
    // 이 플러그인을 적용하면 bootRun, bootJar, bootWar와 같은 스프링 부트 관련 플러그인도 사용할 수 있다.
    id("org.springframework.boot") version "3.0.5"

    // 스프링 부트의 종속성 관리를 쉽게 하기 위한 플러그인
    // 이 플러그인을 적용하면 스프링 부트 버전 관리와 관련된 설정이 자동으로 처리됨
    id("io.spring.dependency-management") version "1.1.0"

    // Asciidoctor와 관련된 플러그인입니다.
    // Asciidoctor는 AsciiDoc 문서를 HTML, PDF, EPUB, 등 다양한 형식으로 변환하는 데 사용됨
    id("org.asciidoctor.jvm.convert") version "3.3.2"

    // 코틀린 언어를 JVM에서 실행할 때 필요한 플러그인입니다.
    kotlin("jvm") version "1.7.22"

    // 스프링 프레임워크와 함께 코틀린 언어를 사용할 때 필요한 플러그인
    kotlin("plugin.spring") version "1.7.22"

    // JPA (Java Persistence API)와 함께 코틀린 언어를 사용할 때 필요한 플러그인
    kotlin("plugin.jpa") version "1.7.22"

    // 코틀린 언어에서 애노테이션 프로세서를 사용할 때 필요한 플러그인
    // 이 플러그인을 사용하면 코틀린으로 작성된 애노테이션 프로세서를 실행할 수 있습니다.
    kotlin("kapt") version "1.6.21"
}

allProjects 코드블럭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 모든 프로젝트의 소스 코드와 컴파일러 버전을 Java 17로 설정하는 구문
// 즉, Java 17 문법을 사용하여 소스 코드를 작성하고, 컴파일러로는 Java 17을 사용한다는 뜻입니다.
java.sourceCompatibility = JavaVersion.VERSION_17

// 모든 프로젝트에 대한 설정을 적용하기 위한 블록입니다.
allprojects {
    // 모든 프로젝트의 그룹 ID를 "com.mashup"으로 설정하는 구문
    // 그룹 ID는 해당 프로젝트를 식별하는 데 사용되며, 일반적으로 회사 또는 조직의 도메인과 유사한 형태로 작성됨
	group = "com.mashup"

    // 모든 프로젝트의 버전을 "0.0.1-SNAPSHOT"으로 설정하는 구문
    // 버전은 소프트웨어의 릴리스 버전을 식별하는 데 사용되며 "-SNAPSHOT"은 개발 버전임을 나타내는 접미사임
	version = "0.0.1-SNAPSHOT"

    // 모든 프로젝트에서 Maven 중앙 저장소를 사용하도록 설정하는 구문
    // Maven 중앙 저장소는 대부분의 Java 라이브러리와 프레임워크가 호스팅되는 공식 저장소이다.
    // 따라서 해당 저장소에서 필요한 라이브러리를 다운로드하여 사용할 수 있다.
    repositories {
		mavenCentral()
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 모든 하위 프로젝트에 대한 설정을 적용하기 위한 블록
subprojects {
    // Kotlin 언어를 사용하여 JVM에서 실행될 수 있는 프로젝트를 작성할 때 필요한 플러그인
    apply(plugin = "org.jetbrains.kotlin.jvm")

    // Spring Framework와 함께 Kotlin을 사용할 때 필요한 플러그인
    apply(plugin = "org.jetbrains.kotlin.plugin.spring")

    // Spring Boot 프레임워크에서 사용하는 플러그인
    // Spring Boot 애플리케이션을 빌드하고 실행하기 위한 여러 기능들을 제공
    apply(plugin = "org.springframework.boot")

    // Kotlin 언어를 사용할 때 필요한 플러그인
	apply(plugin = "kotlin")

    // Java 라이브러리를 작성할 때 필요한 플러그인
	apply(plugin = "java-library")

    // Kotlin과 함께 Java Persistence API(JPA)를 사용할 때 필요한 플러그인
    apply(plugin = "kotlin-jpa")

    // Spring Boot에서 사용하는 라이브러리 의존성 관리를 자동화해주는 플러그인
    apply(plugin = "io.spring.dependency-management")

    // Asciidoctor와 함께 Kotlin을 사용할 때 필요한 플러그인
    apply(plugin = "org.asciidoctor.jvm.convert")

    // Kotlin에서 annotation processing을 사용할 때 필요한 플러그인
    apply(plugin = "kotlin-kapt")

	dependencies {
        // Spring Boot에서 웹 애플리케이션을 개발할 때 필요한 라이브러리
		implementation("org.springframework.boot:spring-boot-starter-web")

        // Kotlin에서 JSON 직렬화 및 역직렬화를 위한 Jackson 라이브러리 모듈
        implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

        // Kotlin에서 로깅을 위한 라이브러리입니다.
		implementation("io.github.microutils:kotlin-logging:2.0.8")

        // Kotlin Reflection API를 사용하기 위한 라이브러리
		implementation("org.jetbrains.kotlin:kotlin-reflect")

        // Spring Boot에서 테스트를 위한 라이브러리
		testImplementation("org.springframework.boot:spring-boot-starter-test")
	}

    // Kotlin 컴파일 태스크에 대한 설정을 정의하는 구문
	tasks.withType<KotlinCompile> {
		kotlinOptions {
            // Kotlin 컴파일러에 전달할 옵션
			freeCompilerArgs = listOf("-Xjsr305=strict")
			jvmTarget = "17"
		}
	}

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

api module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
val asciidoctorExtensions: Configuration by configurations.creating

tasks.test {
    outputs.dir("build/generated-snippets")
}

tasks.asciidoctor {
    inputs.dir("build/generated-snippets")
    dependsOn(tasks.test)
    configurations(asciidoctorExtensions.name)
    baseDirFollowsSourceFile()
}

tasks.register("restDocs") {
    dependsOn("asciidoctor")
    doLast {
        copy {
            from(file("$buildDir/asciidoc/html5"))
            into(file("docs"))
        }
    }
}


dependencies {
    // shorts-domain 이라는 모듈을 의존한다. (의존을 통해 해당 모듈에 있는 도메인들을 사용할 수 있게 되는 것)
    implementation(project(":shorts-domain"))

    testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc")
    asciidoctorExtensions("org.springframework.restdocs:spring-restdocs-asciidoctor")
    testImplementation("com.ninja-squad:springmockk:3.1.1")
}
This post is licensed under CC BY 4.0 by the author.