167 lines
4.9 KiB
Markdown
167 lines
4.9 KiB
Markdown
# `java`, `java-library`, `application`, `war` 플러그인
|
|
|
|
Gradle은 다양한 **플러그인(Plugin)**을 제공하여 프로젝트의 빌드, 실행, 배포 과정을 자동화할 수 있도록 돕는다.
|
|
그중에서도 Java 프로젝트를 위한 `java`, `java-library`, `application`, `war` 플러그인은 각각 **일반 Java 애플리케이션, 라이브러리, 실행형 애플리케이션, 웹 애플리케이션**을 관리하는 데 사용된다.
|
|
|
|
## `java` 플러그인
|
|
|
|
`java` 플러그인은 **일반적인 Java 프로젝트**를 빌드할 때 사용된다.
|
|
이 플러그인을 적용하면 **컴파일, 테스트, JAR 생성, 패키징** 등의 작업을 자동으로 수행할 수 있다.
|
|
|
|
`build.gradle.kts` :
|
|
```kotlin
|
|
plugins {
|
|
java
|
|
}
|
|
|
|
group = "com.example"
|
|
version = "1.0.0"
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
implementation("org.apache.commons:commons-lang3:3.12.0")
|
|
testImplementation("junit:junit:4.13.2")
|
|
}
|
|
```
|
|
|
|
### 주요 태스크
|
|
| 태스크 | 설명 |
|
|
|--------|--------------------------------|
|
|
| `compileJava` | Java 소스 코드 컴파일 |
|
|
| `processResources` | `src/main/resources/`의 리소스를 `build` 폴더로 복사 |
|
|
| `classes` | `compileJava` + `processResources` 실행 |
|
|
| `jar` | JAR 파일 생성 (`build/libs/`에 저장됨) |
|
|
| `test` | 단위 테스트 실행 |
|
|
| `clean` | `build/` 디렉터리 삭제 |
|
|
| `build` | 전체 빌드 (`compileJava`, `test`, `jar` 포함) |
|
|
|
|
|
|
## `java-library` 플러그인
|
|
|
|
`java-library` 플러그인은 **라이브러리 개발**을 위한 플러그인으로, `java` 플러그인의 확장판이다.
|
|
- `api`와 `implementation` 의존성을 구분할 수 있도록 지원한다.
|
|
|
|
### `api` vs `implementation`
|
|
- **`api`** : 외부 프로젝트에서도 접근할 수 있는 공개 API
|
|
- **`implementation`** : 내부에서만 사용하는 의존성
|
|
|
|
`build.gradle.kts`
|
|
```kotlin
|
|
plugins {
|
|
`java-library`
|
|
}
|
|
|
|
group = "com.example"
|
|
version = "1.0.0"
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
api("com.google.guava:guava:32.0.1-jre") // 외부 프로젝트에서도 사용 가능
|
|
implementation("org.apache.commons:commons-lang3:3.12.0") // 내부에서만 사용
|
|
}
|
|
```
|
|
|
|
### 주요 태스크
|
|
| 태스크 | 설명 |
|
|
|--------|--------------------------------|
|
|
| `assemble` | JAR 파일 생성 |
|
|
| `publish` | 라이브러리를 배포 (예: Maven Central) |
|
|
|
|
|
|
## `application` 플러그인
|
|
|
|
`application` 플러그인은 **실행 가능한 Java 애플리케이션**을 만들기 위해 사용된다.
|
|
- `mainClass`를 지정하여 `run` 태스크를 사용할 수 있다.
|
|
|
|
`build.gradle.kts`
|
|
```kotlin
|
|
plugins {
|
|
application
|
|
}
|
|
|
|
group = "com.example"
|
|
version = "1.0.0"
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
implementation("org.apache.commons:commons-lang3:3.12.0")
|
|
}
|
|
|
|
application {
|
|
mainClass.set("com.example.Main") // 실행할 메인 클래스
|
|
}
|
|
```
|
|
|
|
### 주요 태스크
|
|
| 태스크 | 설명 |
|
|
|--------|--------------------------------|
|
|
| `run` | 애플리케이션 실행 |
|
|
| `installDist` | 실행 가능한 배포 패키지 생성 (`build/install/`) |
|
|
| `distZip` | `.zip` 패키지로 애플리케이션 배포 |
|
|
| `distTar` | `.tar` 패키지로 애플리케이션 배포 |
|
|
|
|
|
|
## `war` 플러그인
|
|
|
|
`war` 플러그인은 **웹 애플리케이션(WAR 파일) 배포를 위한 플러그인**이다.
|
|
- **Servlet 기반 웹 애플리케이션을 패키징**할 때 사용된다.
|
|
- `java` 플러그인을 자동으로 포함한다.
|
|
|
|
`build.gradle.kts`
|
|
```kotlin
|
|
plugins {
|
|
war
|
|
}
|
|
|
|
group = "com.example"
|
|
version = "1.0.0"
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
providedCompile("javax.servlet:javax.servlet-api:4.0.1") // 컨테이너가 제공하는 의존성
|
|
implementation("org.springframework:spring-webmvc:5.3.23") // 웹 MVC 프레임워크
|
|
}
|
|
```
|
|
|
|
### 디렉터리 구조
|
|
```
|
|
src/
|
|
├── main/
|
|
│ ├── java/ <-- Java 소스 코드
|
|
│ ├── resources/ <-- 정적 리소스
|
|
│ ├── webapp/ <-- `WEB-INF` 및 JSP 파일
|
|
│ ├── WEB-INF/
|
|
│ │ ├── web.xml
|
|
│ ├── index.jsp
|
|
```
|
|
|
|
### 주요 태스크
|
|
| 태스크 | 설명 |
|
|
|--------|--------------------------------|
|
|
| `war` | WAR 파일 생성 (`build/libs/app-1.0.0.war`) |
|
|
| `explodedWar` | 압축되지 않은 WAR 파일 생성 |
|
|
| `assemble` | 전체 빌드 실행 |
|
|
|
|
|
|
## 플러그인 비교 정리
|
|
|
|
| 플러그인 | 용도 | 실행 방식 | 주요 태스크 |
|
|
|----------|--------|------------|------------------------------|
|
|
| `java` | 일반 Java 프로젝트 | 실행 X, JAR만 생성 | `compileJava`, `jar`, `build` |
|
|
| `java-library` | 라이브러리 개발 | 실행 X, API 관리 | `publish`, `jar`, `build` |
|
|
| `application` | 실행 가능한 앱 | `run`으로 실행 가능 | `run`, `installDist`, `distZip` |
|
|
| `war` | 웹 애플리케이션 | WAR 파일 생성 | `war`, `explodedWar` |
|
|
|