Files
gradle-examples/doc/11_java.md
2025-02-22 01:13:24 +09:00

4.9 KiB

java, java-library, application, war 플러그인

Gradle은 다양한 **플러그인(Plugin)**을 제공하여 프로젝트의 빌드, 실행, 배포 과정을 자동화할 수 있도록 돕는다.
그중에서도 Java 프로젝트를 위한 java, java-library, application, war 플러그인은 각각 일반 Java 애플리케이션, 라이브러리, 실행형 애플리케이션, 웹 애플리케이션을 관리하는 데 사용된다.

java 플러그인

java 플러그인은 일반적인 Java 프로젝트를 빌드할 때 사용된다.
이 플러그인을 적용하면 컴파일, 테스트, JAR 생성, 패키징 등의 작업을 자동으로 수행할 수 있다.

build.gradle.kts :

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 플러그인의 확장판이다.

  • apiimplementation 의존성을 구분할 수 있도록 지원한다.

api vs implementation

  • api : 외부 프로젝트에서도 접근할 수 있는 공개 API
  • implementation : 내부에서만 사용하는 의존성

build.gradle.kts

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

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

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