2025-02-22T01:13:24
This commit is contained in:
172
doc/05_플러그인.md
Normal file
172
doc/05_플러그인.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# 플러그인
|
||||
|
||||
Gradle의 플러그인은 프로젝트의 빌드 및 관리를 확장하는 강력한 기능을 제공한다. Gradle은 기본적인 빌드 기능을 제공하지만, 플러그인을 사용하면 프로젝트에 특정 기능을 추가하고, 빌드 스크립트에서 불필요한 반복을 줄일 수 있다. 예를 들어, Java 프로젝트를 빌드하거나, Kotlin을 지원하거나, 애플리케이션을 패키징하는 등의 작업을 자동화할 수 있다.
|
||||
|
||||
### 플러그인의 종류
|
||||
|
||||
Gradle 플러그인은 크게 두 가지로 나뉜다.
|
||||
|
||||
- **빌드 스크립트에 포함된 로컬 플러그인**
|
||||
- 프로젝트 내에서 직접 정의하여 사용하는 플러그인
|
||||
- **외부 저장소에서 제공하는 공식 플러그인 및 커스텀 플러그인**
|
||||
- Gradle 공식 플러그인이나 외부 개발자가 만든 플러그인
|
||||
|
||||
## Gradle 플러그인 적용 방법
|
||||
|
||||
Gradle에서 플러그인을 적용하는 방법은 크게 두 가지가 있다.
|
||||
|
||||
### `plugins` 블록 사용
|
||||
|
||||
Kotlin DSL(`build.gradle.kts`)에서 플러그인을 적용하는 방식이다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("java") // Java 프로젝트를 위한 플러그인
|
||||
id("org.jetbrains.kotlin.jvm") version "1.8.0" // Kotlin JVM 플러그인
|
||||
}
|
||||
```
|
||||
|
||||
### `apply` 함수 사용
|
||||
|
||||
이전 Gradle 방식으로, 현재는 `plugins` 블록을 사용하는 것이 권장된다.
|
||||
|
||||
```kotlin
|
||||
apply(plugin = "java")
|
||||
apply(plugin = "org.jetbrains.kotlin.jvm")
|
||||
```
|
||||
|
||||
## Gradle의 공식 플러그인
|
||||
|
||||
Gradle은 다양한 공식 플러그인을 제공하며, 각 플러그인은 특정한 목적을 위해 사용된다.
|
||||
|
||||
### Java 플러그인 (`java`)
|
||||
|
||||
Java 애플리케이션을 개발할 때 사용하는 플러그인으로, 컴파일, 테스트, JAR 패키징 등의 기능을 제공한다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("java")
|
||||
}
|
||||
```
|
||||
|
||||
기본적으로 제공하는 태스크:
|
||||
- `compileJava`: Java 코드 컴파일
|
||||
- `processResources`: 리소스 처리
|
||||
- `jar`: JAR 파일 생성
|
||||
- `test`: JUnit 등의 프레임워크로 테스트 실행
|
||||
|
||||
|
||||
### Java Library 플러그인 (`java-library`)
|
||||
|
||||
라이브러리 형태의 Java 프로젝트를 위한 플러그인으로, `java` 플러그인보다 좀 더 세분화된 의존성 관리를 제공한다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("java-library")
|
||||
}
|
||||
```
|
||||
|
||||
**차이점:**
|
||||
- `api` 의존성을 사용하여 다른 모듈에서도 접근 가능하게 설정할 수 있다.
|
||||
- `implementation`과 `api`의 차이를 명확하게 구분하여, 라이브러리 프로젝트에 적합하다.
|
||||
|
||||
|
||||
### Application 플러그인 (`application`)
|
||||
|
||||
실행 가능한 애플리케이션을 개발할 때 사용하는 플러그인으로, 실행 가능한 JAR 파일을 생성하고, `mainClass`를 지정할 수 있다.
|
||||
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("application")
|
||||
}
|
||||
|
||||
application {
|
||||
mainClass.set("com.example.MainKt")
|
||||
}
|
||||
```
|
||||
|
||||
제공 테스크 :
|
||||
- `run`: 애플리케이션 실행
|
||||
- `installDist`: 실행 가능한 패키지 생성
|
||||
- `distZip`: ZIP 파일로 애플리케이션 배포
|
||||
|
||||
|
||||
|
||||
|
||||
### Maven Publish 플러그인 (`maven-publish`)
|
||||
|
||||
라이브러리를 Maven 중앙 저장소 또는 내부 Nexus, Artifactory 등의 저장소에 배포할 때 사용한다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("maven-publish")
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
create<MavenPublication>("maven") {
|
||||
groupId = "com.example"
|
||||
artifactId = "my-library"
|
||||
version = "1.0.0"
|
||||
|
||||
from(components["java"])
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Android 플러그인 (`com.android.application`)
|
||||
|
||||
Android 애플리케이션을 개발할 때 사용하는 플러그인이다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
}
|
||||
```
|
||||
|
||||
- Android 프로젝트 빌드 및 패키징
|
||||
- `AndroidManifest.xml` 및 리소스 처리
|
||||
- APK 생성
|
||||
|
||||
### Kotlin 플러그인 (`org.jetbrains.kotlin.jvm`)
|
||||
|
||||
Kotlin을 사용한 JVM 애플리케이션을 개발할 때 사용한다.
|
||||
|
||||
적용 방법:
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("org.jetbrains.kotlin.jvm") version "1.8.0"
|
||||
}
|
||||
```
|
||||
|
||||
기본 제공 태스크:
|
||||
- Kotlin 코드 컴파일 (`compileKotlin`)
|
||||
- Kotlin 테스트 실행 (`test`)
|
||||
- JAR 파일 생성 (`jar`)
|
||||
|
||||
### Java Gradle Plugin (`java-gradle-plugin`)
|
||||
|
||||
Gradle 플러그인을 직접 개발할 때 사용하는 플러그인이다.
|
||||
|
||||
```kotlin
|
||||
plugins {
|
||||
id("java-gradle-plugin")
|
||||
}
|
||||
```
|
||||
|
||||
제공 기능:
|
||||
- Gradle 플러그인 코드 작성 및 빌드
|
||||
- 플러그인 테스트 및 배포
|
||||
|
||||
|
||||
---
|
||||
|
||||
[Gradle Plugin Portal](https://plugins.gradle.org/)
|
||||
|
||||
|
||||
[플러그인](https://docs.gradle.org/current/userguide/plugin_reference.html#plugin_reference)
|
||||
Reference in New Issue
Block a user