프로젝트 구성 살펴보기

init task로 생성된 새 프로젝트의 구성은 다음과 같다.

├── gradle 
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew 
├── gradlew.bat 
├── settings.gradle.kts 
└── app
    ├── build.gradle.kts 
    └── src
        ├── main
        │   └── kotlin 
        │       └── demo
        │           └── App.kt
        └── test
            └── kotlin 
                └── demo
                    └── AppTest.kt
  • gradle: wrapper file들이 있는 폴더

  • gradlew, gradlew.bat: Gradle의 wrapper 스크립트

    • wrapper은 필요한 경우에 명시된 Gradle 버전에 따라 다운로드를 하는 스크립트를 일컫는다.

  • settings.gradle.kts: build 이름과 subproject들을 관리하는 설정 파일

  • app/build.gradle.kts: app 프로젝트의 build 스크립트

  • app/src/main/kotlin: 기본 Kotlin 소스 코드 폴더

  • app/src/test/kotlin: 기본 Kotlin 테스트 코드 폴더

app/build.gradle.kts

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.4.31" 

    application 
}

repositories {
    mavenCentral() 
}

dependencies {
    implementation(platform("org.jetbrains.kotlin:kotlin-bom")) 

    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") 

    api("com.google.guava:guava:30.0-jre") 

    testImplementation("org.jetbrains.kotlin:kotlin-test") 

    testImplementation("org.jetbrains.kotlin:kotlin-test-junit") 
}

application {
    mainClass.set("demo.AppKt") 
}
  • plugins: 프로젝트에서 사용하는 Gradle 플러그인들

    • id("org.jetbrains.kotlin.jvm") version "1.4.3": 프로젝트에 org.jetbrains.kotlin.jvm 플러그인을 사용해 Kotlin support를 추가한다.

    • application: Gradle에 내장된 application 플러그인을 사용해 Java CLI App support를 추가한다.

  • repositories: 프로젝트에서 사용할 의존성 저장소

    • mavenCentral(): Maven Central 저장소에서 의존성을 찾을 수 있게 설정한다.

  • dependencies: 프로젝트에서 사용될 의존성들

    • implementation(...): 의존성의 API에 접근 가능

    • testImplementation(...): Test시에만 의존성의 API에 접근 가능

    • api(...): 의존성 API 및 의존성의 하위 의존성 API까지 접근 가능

      • api(...)보단 implementation(...) 사용 권장

    • implementation(platform(...)): 하위 의존성들의 버전을 담고 있으므로, 다른 의존성 선언 시 버전을 명시하지 않아도 됨

  • application: 상단 plugin에서 선언한 application 플러그인을 통해 사용하는 스크립트

    • mainClass.set(...): App이 실행될 main class 정의

    • 이걸 통해 runsrc/main/kotlin/demo/App.kt가 실행된다.

어플리케이션 실행 및 번

src/main/kotlin/demo/App.kt

/*
 * This Kotlin source file was generated by the Gradle 'init' task.
 */
package demo

class App {
    val greeting: String
        get() {
            return "Hello World!"
        }
}

fun main() {
    println(App().greeting)
}

run task를 통해 실행하

./gradlew run

> Task :app:run
Hello world!

BUILD SUCCESSFUL
2 actionable tasks: 2 executed

build task를 통해 번들하기

$ ./gradlew build

BUILD SUCCESSFUL in 0s
8 actionable tasks: 8 executed

app/build/distributions/app.tarapp/build/distributions/app.zip이 생성된다.

buid --scan task를 통해 빌드 과정 확인하기

./gradlew build --scan
Starting a Gradle Daemon, 2 incompatible Daemons could not be reused, use --status for details

BUILD SUCCESSFUL in 29s
8 actionable tasks: 8 executed

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no]yes 

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/dxvdzylnsv4ce

Last updated