Contents
see ListMaven vs Gradle - 빌드 도구 비교
Maven과 Gradle은 Java 프로젝트의 빌드, 의존성 관리를 담당하는 도구입니다. 각각의 특징과 장단점을 비교하여 프로젝트에 맞는 도구를 선택하세요.
비교 요약
| 항목 | Maven | Gradle |
|---|---|---|
| 설정 파일 | pom.xml (XML) | build.gradle (Groovy/Kotlin) |
| 성능 | 보통 | 빠름 (캐싱, 증분 빌드) |
| 유연성 | 규약 기반 | 스크립트로 커스터마이징 |
| 학습곡선 | 낮음 | 중간 |
| IDE 지원 | 매우 좋음 | 좋음 |
Maven 기본 구조
<!-- pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>Gradle 기본 구조
// build.gradle (Groovy DSL)
plugins {
id "java"
id "org.springframework.boot" version "3.2.0"
id "io.spring.dependency-management" version "1.1.4"
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web"
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
tasks.named("test") {
useJUnitPlatform()
}Gradle Kotlin DSL
// build.gradle.kts (Kotlin DSL)
plugins {
java
id("org.springframework.boot") version "3.2.0"
id("io.spring.dependency-management") version "1.1.4"
}
group = "com.example"
version = "1.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}주요 명령어 비교
# 빌드
mvn clean install
./gradlew clean build
# 테스트
mvn test
./gradlew test
# 패키징
mvn package
./gradlew jar # 또는 ./gradlew bootJar
# 실행
mvn spring-boot:run
./gradlew bootRun
# 의존성 확인
mvn dependency:tree
./gradlew dependencies의존성 범위 비교
<!-- Maven -->
<dependency>
<scope>compile</scope> <!-- 기본 -->
<scope>provided</scope> <!-- 컴파일만 -->
<scope>runtime</scope> <!-- 런타임만 -->
<scope>test</scope> <!-- 테스트만 -->
</dependency>
// Gradle
dependencies {
implementation "..." // compile (기본)
compileOnly "..." // provided
runtimeOnly "..." // runtime
testImplementation "..." // test
}Gradle 장점
// 1. 증분 빌드 - 변경된 부분만 빌드
./gradlew build // 두 번째 실행이 훨씬 빠름
// 2. 빌드 캐시
./gradlew build --build-cache
// 3. 병렬 실행
./gradlew build --parallel
// 4. 커스텀 태스크 쉽게 작성
tasks.register("hello") {
doLast {
println("Hello, Gradle!")
}
}
// 5. Wrapper로 버전 통일
./gradlew wrapper --gradle-version 8.5Maven 장점
<!-- 1. 명확한 규약 (Convention over Configuration) -->
<!-- 2. 풍부한 문서와 레퍼런스 -->
<!-- 3. 안정적인 플러그인 생태계 -->
<!-- 4. 대부분의 IDE에서 완벽 지원 -->
<!-- 5. CI/CD 도구 통합 용이 -->멀티 모듈 프로젝트
<!-- Maven (부모 pom.xml) -->
<modules>
<module>core</module>
<module>web</module>
<module>api</module>
</modules>
// Gradle (settings.gradle)
rootProject.name = "myapp"
include "core", "web", "api"선택 기준
- Maven 선택: 안정성 중시, 팀 표준, 간단한 빌드
- Gradle 선택: 빌드 성능 중요, 복잡한 빌드 로직, Android 개발