티스토리 뷰

Kotlin?

  • KotlinIntelliJ IDEA의 개발사로 유명한 JetBrains이 만든 개발 언어이다. Java 언어에 조예가 깊은 전문가 집단이 엔터프라이즈 레벨의 애플리케이션을 최소의 공수로 유지보수가 쉽도록 새롭게 만든 언어라고 말할 수 있다. 수년간의 베타 기간을 거쳐 2016년 1.0이 첫 공개되었으며 글을 작성하는 현재 1.3.70이 출시된 상태이다.

Java, Kotlin 언어를 같은 프로젝트에서?

  • KotlinJava와 같은 JVM 생태계를 공유한다. Java 언어로 작성한 소스 코드가 javac에 의해서 중간 언어인 .class로 컴파일되는 것과 동일하게 Kotlin 언어로 작성한 소스 코드 또한 kotlinc에 의해서 .class로 컴파일 된다. 컴파일된 2개 파일은 JVM에 의해서 차별 없이 동일하게 실행된다. 우리는 Gradle, IntelliJ IDEA와 같은 현대적인 개발 도구의 도움으로 편리하게 2개 언어를 같은 프로젝트에서 작성할 수 있다.

Spring Boot 2.0 + Java + Kotlin

  • Spring Boot 2.0 프로젝트에 JavaKotlin을 동시에 적용하는 방법은 간단하다. /build.gradle 파일만 수정하면 된다. 아래는 가장 기본적인 종속성만 추가한 예이다.
buildscript {
    ext {
        kotlinVersion = '1.3.41'
        springBootVersion = '2.2.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
        classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.jsonobject'
sourceCompatibility = '11'
compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    compileOnly('org.projectlombok:lombok')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}
  • 가장 먼저 buildscript.ext.kotlinVersion 항목을 추가해야 한다. 프로젝트에 사용하려는 Kotlin의 버전을 입력한다. 다음으로 buildscript.dependencies.classpathorg.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}, org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}을 추가해준다.
  • 다음으로 apply plugin 항목에 기존에 있던 java에 추가로 kotlin, kotlin-spring을 추가한다. 이어서 compileKotlin, compileTestKotlin 항목을 위와 같이 추가해준다.
  • 마지막으로 dependencies 항목에 org.jetbrains.kotlin:kotlin-stdlib-jdk8, org.jetbrains.kotlin:kotlin-reflect, com.fasterxml.jackson.module:jackson-module-kotlin을 추가해주면 JavaKotlin을 함께 사용할 준비가 끝난다.

트러블슈팅

  • kotlinVersion1.3.50으로 설정할 경우 빌드시 아래와 같은 경고가 발생한다. 인터넷에서는 1.3.41로 다운그레이드하여 빌드할 것을 권장하고 있다. [관련 링크]
> Task :kaptKotlin
w: [kapt] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: com.querydsl.apt.jpa.JPAAnnotationProcessor (NON_INCREMENTAL).

참고 글

댓글
댓글쓰기 폼