2025-02-22T01:13:24
This commit is contained in:
166
doc/11_java.md
Normal file
166
doc/11_java.md
Normal file
@@ -0,0 +1,166 @@
|
||||
# `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` |
|
||||
|
||||
Reference in New Issue
Block a user