Gradle Kotlin, Java 프로젝트 만들기
우리는 이번 글에서 Gradle Kotlin, Java Project의 기본 구성을 살펴볼 것이다. 이를 위해 gradle init을 사용해 Kotlin 프로젝트를 생성하고 내부 구성을 볼 것이다. 다음 과정을 따라 Gradle Kotlin, Java Project를 만들도록 하자.
1. KotlinProject 폴더를 만든 후 현재 폴더를 KotlinProject 폴더로 바꾼다. 이후 gradle init을 하게 되면 총 6가지 질문이 나오게 된다.
$ mkdir KotlinProject
$ cd KotlinProject
$ gradle init
Starting a Gradle Daemon (subsequent builds will be faster)
2. 첫째 질문은 gradle project의 종류이다. 우리는 이번에 간단하게 kotlin 혹은 java 프로젝트의 gradle의 구성요소를 살펴볼 것이기 때문에 application인 2번을 선택한 후 엔터를 친다.
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 1
3. 둘째 질문은 implementation language를 선택하는 부분이다. 우리는 이번 글에서 Kotlin 혹은 Java 어플리케이션을 살펴볼 것이기 때문에 4번 혹은 3번을 선택한다. Kotlin과 Java는 구성이 같으며, 다른 점은 소스코드가 들어가는 폴더명이 하나는 kotlin이고 하나는 java라는 점 뿐이다.
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 4
4. 셋째 질문은 싱글 모듈 프로젝트로 만들 것인지, 멀티 모듈 프로젝트로 만들 것인지에 대한 선택이다. 이번에는 기본 구성만 살펴볼 것이므로 1번을 선택한다.
*모듈은 기능 단위 혹은 아키텍처를 위해서 사용된다.
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1
5. 넷째 질문은 gradle script를 작성할 언어의 선택부이다. Kotlin을 선택(2번 선택)한다.
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 2
6. 다섯째 Project의 이름을 설정하는 부분이다. 그냥 엔터를 치면 폴더 이름이 프로젝트 이름이 된다.
Generate build using new APIs and behavior (some features may change in the next
Project name (default: firstproject):
7. 마지막 질문은 소스코드가 들어갈 패키지를 설정하는 부분이다. 이 부분에 이 글에서는 studio.simpli.kotlinworld를 사용하였다.
Source package (default: KotlinProject): studio.simpli.kotlinworld
8. Gradle 프로젝트가 만들어졌다. 내부에는 app(폴더), gradle(폴더), gradlew(파일), gradlew.bat(파일), settings.gradle.kts(파일) 총 5가지 폴더와 파일이 만들어진다.
$ ls
app gradlew settings.gradle.kts
gradle gradlew.bat
자 이제 각각에 대해 살펴보자.
gradle, gradlew, gradlew.bat
gradle 폴더와 gradlew, gradlew.bat은 내장 그레이들과 내장 그레이들을 사용하기 위한 스크립트이다. 이에 대해서는 이 글에서는 따로 설명하지 않겠다. 다음글을 참조하도록 하자.
settings.gradle.kts 혹은 settings.gradle
settings.gradle.kts 혹은 settings.gradle은 gradle 프로젝트의 설정을 하는 gradle script이다. 이곳에는 모듈과, 프로젝트의 이름 등 gradle 프로젝트의 세팅과 관련된 부분이 설정된다.
기본 Kotlin 프로젝트에서는 settings.gradle.kts가 다음과 같이 설정된다. rootProject.name은 프로젝트 이름을 설정하는 것이고, include는 모듈을 설정하는 부분으로 inclue("app")은 app 폴더에 build.gradle이 있는 모듈이 있다는 것을 뜻한다.
settings.gradle.kts의 .kts는 kotlin script의 약자로, 같은 역할을 하는 파일이 groovy에서는 settings.gradle로 설정된다. settings.gradle의 kotlin script이다. gradle 언어를 groovy로 생성하면 setting.gradle로 생성되고, 다음과 같이 나온다. 위와 아래의 문법이 다른 것을 확인할 수 있다.
app 폴더
app폴더는 모듈 단위 gradle script인 build.gradle.kts와 소스코드가 들어가는 공간이다. build.gradle.kts에는 app 모듈에 적용될 gradle 스크립트들을 작성한다. 소스코드는 src/main/kotlin 폴더에 있으며, 프로젝트 생성 시 설정한 패키지에 App.kt가 들어가 있는 것을 확인할 수 있다.
*이 글에서는 Gradle Kotlin, Java 프로젝트 만들기 - 7번에서 studio.simpli.kotlinworld 를 패키지 명으로 설정하였다.
build.gradle.kts 내부를 보면 다음과 같이 설정되어 있다. 여기서 plugins 블록에는 jvm관련 플러그인이 들어가 있는 것을 확인할 수 있고 repositories에는 플러그인과 라이브러리를 받아올 repository를 설정한다. dependencies에는 받아올 라이브러리를 작성하면 실행 시 필요한 라이브러리를 받아온다. 마지막 application 부분에는 mainClass에 대한 정보를 넣어 kotlin, java application의 main function의 기본 실행 위치를 설정한다.
*Kotlin과 Java는 main function이 프로그램의 시작점이다.
gradle task로 Kotlin Project 컴파일 하기
수행할 수 있는 gradle task
먼저 수행할 수 있는 gradle task들을 확인하기 위해 gradle task --all 명령어를 확인한다.
gradle tasks --all
gradle task로 컴파일하기
위에서 나온 목록 중에 다음 목록이 있을 것이다.
app:compileKotlin - Compiles the compilation 'main' (target (jvm)).
이것을 다음 명령어로 수행하면
$ ./gradlew app:compileKotlin
내부의 빌드 폴더 안에 App.kt 코틀린 코드의 바이트 코드인 AppKt.class 파일이 생성된 것을 확인할 수 있다.
gradle task로 jar파일 만들기
컴파일만 하면 코드를 실행하기 위해 다시 java AppKt.class를 수행해야 한다. 이를 바로 패키징하고 수행할 수 있는 파일로 만들기 위해서는 AppKt의 main function을 수행하는 jar로 만들어야 한다. gradle은 매우 간단하게 패키징을 할 수 있게 해준다.
다음 명령어를 통해 app모듈을 jar파일로 패키징 할 수 있다.
$ ./gradlew app:jar