# Table of Contents

# Gradle Plugin

Gradle Plugin은 유용한 Task들의 집합이다. Gradle Plugin을 추가하면 프로젝트를 더 다양한 방법으로 빌드할 수 있다. 간단한 Gradle 프로젝트를 만들면서 Gradle Plugin에 대해 알아보자.

# 예제

먼저 디렉토리를 생성하자.

$ mkdir myProject
$ cd myProject

Gradle 프로젝트로 초기화하기 위하여 gradle init명령어를 입력한다.

$ gradle init

생성할 프로젝트 정보를 입력해야한다. 일단 아래와 같이 입력하자.

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 1

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] no

Project name (default: myProject): myProject

프로젝트가 성공적으로 생성되면 다음과 같이 출력된다.

> Task :init
Get more help with your project: Learn more about Gradle by exploring our samples at https://docs.gradle.org/7.3.1/samples

Gradle 프로젝트는 다음과 같은 구조를 가진다.

$ tree .
.
├── build.gradle
├── settings.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── .gradle

이제 Java 소스코드를 작성해보자. 우선 src/java/main 디렉토리를 생성한다.

$ mkdir -p src/java/main
$ cd src/java/main

이 디렉토리 안에 패키지를 생성한다.

$ mkdir -p com.yologger.app

디렉토리 구조는 다음과 같다.

$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    └── main
        └── java
            └── com
                └── yologger
                    └── app
                        └── Main.java

Main.java파일을 생성하고 아래와 같이 코드를 작성한다.

package com.yologger.app;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

마지막으로 빌드 스크립트를 작성하자.

// 플러그인 적용
apply plugin: 'java'
apply plugin: 'application'

application {
    // Main 함수가 포함된 클래스 지정
    mainClass = 'com.yologger.app.Main'
}

이제 다음 명령어로 프로젝트를 빌드할 수 있다.

$ gradle compileJava

다음 명령어로 프로젝트를 실행할 수도 있다.

$ gradle run

# Gradle Plugin

예제에서 build.gradle파일에 두 개의 플러그인을 적용했다.

apply plugin: 'java'
apply plugin: 'application'

java는 Java 어플리케이션을 컴파일하기 위한 플러그인이다. 이 플러그인은 compileJava 태스크를 포함한다. 따라서 콘솔창에서 다음과 같이 태스크를 호출할 수 있게 된다.

$ gradle compileJava

java 플러그인이 제공하는 모든 태스크는 이 곳 (opens new window)에서 확인할 수 있다.

application은 Java 어플리케이션을 JVM에서 실행시키기 위한 플러그인이다. 이 플러그인은 run 태스크를 포함한다. 따라서 콘솔창에서 다음과 같이 태스크를 호출할 수 있게 된다.

$ gradle run

이처럼 Gradle Plugin은 기본으로 내장된 태스크 외에도 유용한 태스크 집합을 추가해준다.

# Built-in Plugin

Gradle은 내장된 기본 플러그인을 제공한다. 이를 Built-in Plugin이라고 한다. java, application 플러그인도 Built-in Plugin이며 별도의 설치없이 사용할 수 있다. 모든 Built-in Plugin은 이 곳 (opens new window)에서 확인할 수 있다.

# 외부 Plugin 설치

Built-in Plugin 외에도 외부 플러그인을 설치하고 적용할 수 있다.

보통 안드로이드 어플리케이션을 개발할 때는 Android 플러그인과 Kotlin Android 플러그인과 설치한다.

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // Android Gradle Plugin
        classpath "com.android.tools.build:gradle:7.0.0"

        // Kotlin Android Gradle Plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
    }
}

그리고 다음과 같이 플러그인을 적용한다.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
  // ...
}

스프링 부트 어플리케이션을 개발할 때는 Spring Boot 플러그인을 설치하고 적용한다.

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

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