OKdevTV
sdk install gradle
brew install gradle
choco install gradle
scoop install gradle
# 프로젝트 빌드
gradle build
# 테스트 건너뛰고 빌드
gradle build -x test
# Spring Boot 애플리케이션 실행
gradle bootRun
# Gradle Wrapper 사용 (권장)
./gradlew build
./gradlew bootRun
# 새 디렉토리 생성
mkdir my-project
cd my-project
# Gradle 초기화 (대화형)
gradle init
mkdir basic-demo
cd basic-demo
touch build.gradle
# 모든 태스크 보기
gradle tasks --all
# 기본 태스크 보기
gradle tasks
implementation : 컴파일 및 런타임에 필요, API는 노출되지 않음 (권장)api : 컴파일 및 런타임에 필요, API가 노출됨compileOnly : 컴파일 시에만 필요 (런타임에는 불필요)runtimeOnly : 런타임에만 필요testImplementation : 테스트 컴파일 및 실행에만 필요testCompileOnly : 테스트 컴파일에만 필요testRuntimeOnly : 테스트 실행에만 필요plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
// 파일 복사 태스크
task copy(type: Copy) {
from 'src'
into 'dest'
}
// ZIP 파일 생성 태스크
task zip(type: Zip) {
from 'src'
archiveFileName = 'archive.zip'
}
# 현재 실행 중인 모든 Gradle 데몬 상태 확인
gradle --status
# 모든 Gradle 데몬 중지
gradle --stop
# 특정 프로세스 ID로 데몬 중지 (Linux/macOS)
kill -9 <PID>
# 실행 중인 Gradle 데몬 찾기 (Linux/macOS)
ps -ef | grep gradle
# 실행 중인 Gradle 데몬 찾기 (Windows)
tasklist | findstr gradle
gradle.properties 파일에 다음 설정 추가:
# 데몬 비활성화 (항상 새 프로세스에서 빌드 실행)
org.gradle.daemon=false
# 데몬 JVM 메모리 설정
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError
# 데몬 유휴 시간 설정 (밀리초 단위, 예: 1시간)
org.gradle.daemon.idletimeout=3600000
~/.gradle/daemon/<버전>/daemon-<PID>.out.loggradle wrapper
gradle wrapper --gradle-version=8.7
./gradlew build # Linux/macOS
gradlew.bat build # Windows
repositories {
mavenCentral()
maven {
url 'https://repo.mycompany.com/maven2'
credentials {
username = 'username'
password = 'password'
}
}
// JCenter는 더 이상 권장되지 않음
// jcenter()
}
# Spring Boot 애플리케이션에 인자 전달
./gradlew bootRun --args='--server.port=9090 --spring.profiles.active=dev'
// settings.gradle
rootProject.name = 'my-project'
include 'app', 'library'
// root build.gradle
allprojects {
repositories {
mavenCentral()
}
}
subprojects {
apply plugin: 'java'
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
}
}
| 특성 | Gradle | Maven |
|---|---|---|
| 빌드 스크립트 | Groovy 또는 Kotlin DSL (간결하고 유연함) | XML (상대적으로 장황하고 경직됨) |
| 성능 | 증분 빌드, 빌드 캐시, 병렬 실행으로 더 빠름 | 상대적으로 느림 |
| 의존성 관리 | 동적 버전, 전이적 의존성 제외, 세밀한 제어 | 중앙 저장소, 전이적 의존성 관리 |
| 커스터마이징 | 매우 유연하고 확장 가능한 플러그인 시스템 | 플러그인 시스템이 있지만 덜 유연함 |
| 학습 곡선 | 더 가파른 학습 곡선 (유연성으로 인해) | 상대적으로 배우기 쉬움 |
| IDE 지원 | 주요 IDE에서 지원 | 주요 IDE에서 광범위하게 지원 |
| 커뮤니티 | 성장 중이지만 Maven보다 작음 | 오랜 역사와 큰 커뮤니티 |
| 적합한 프로젝트 | 복잡하고 대규모 프로젝트, 커스텀 빌드 로직 | 표준적인 빌드 프로세스를 가진 프로젝트 |
Maven에서 Gradle로 전환을 고려한다면:
gradle init 명령으로 쉽게 변환 가능