#BASIC

[Gradle] Custom Plugin 만들어보기

피치트리 2022. 2. 6. 23:05

[목표]

Gradle Task를 만드는 간단한 플러그인 작성 > maven local에 배포 > 해당 플러그인 활용해보기

 

[Usage]

/ 공식문서 참고

/ kotlin 사용 (개발언어, DSL)

/ java-gradle-plugin, maven-publish 플러그인 활용

 

[라이브러리 프로젝트]

먼저 간단하게 아래와 같이 GreetingPlugin 클래스를 만들고, 플러그인을 생성하도록 설정합니다.

 

build.gradle.kts

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

plugins {
    kotlin("jvm") version "1.6.10"
    `java-gradle-plugin`
    `maven-publish`
}

gradlePlugin {
    plugins {
        create("simplePlugin") { // java-gradle-plugin을 활용하여 플러그인 생성
            id = "org.example.greeting"
            implementationClass = "org.example.GreetingPlugin" // 구현체
        }
    }
}

setting.gradle.kts

rootProject.name = "mylibrary"

GreetingPlugin.kt

package org.example

import org.gradle.api.Plugin
import org.gradle.api.Project

class GreetingPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.tasks.register("printMessage") { // task 등록
            it.group = "my tasks" // task group명
            it.description = "This is my first task"
            it.doLast { // task 실행 block
                println("This is my first task!") 
            }
        }
    }
}

 

maven-publish 플러그인을 활용하여 publishToMavenLocal task를 실행하면 maven 로컬저장소(~/.m2/repository)에 해당 프로젝트가 배포되는 것을 확인할 수 있습니다.

 

 

 

 

[플러그인 적용 테스트]

build.gradle.kts

group = "org.example"
version = "1.0-SNAPSHOT"

plugins {
    id("org.example.greeting") version "1.0-SNAPSHOT" // 플러그인 적용
}

setting.gradle.kts

rootProject.name = "mylibrary-test"

pluginManagement {
    repositories {
        mavenLocal()
        mavenCentral()
    }
}

위와 같이 설정하여 내가 만든 플러그인을 적용해보면, my tasks 그룹에 printMessage라는 task가 생성된 것을 확인할 수 있습니다.