Gradle

κ°œμš”

κΈ°μ‘΄ Ant / Maven κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ μ§„ν™”λœ λΉŒλ“œ 툴둜써 λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포, 개발 λ“±μ˜ μžλ™ν™”λ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.

Ant λΉŒλ“œλŠ” μœ μ—°μ„±μ΄ λ›°μ–΄λ‚œ λΉŒλ“œ νˆ΄λ‘œμ„œ κ°œλ°œμžκ°€ 자유둭게 λΉŒλ“œλ‹¨μœ„ (target) 을 μ§€μ •ν•˜κ³  λΉŒλ“œ λ‹¨μœ„κ°„μ˜ μ˜μ‘΄κ΄€κ³„λ₯Ό 자유둭게 μ„€μ •ν•  수 μžˆλ‹€λŠ” 것이닀.
μžμœ λ„κ°€ λ†’λ‹€λŠ”κ²ƒμ€ 쒋은 λ„κ΅¬μ΄μ§€λ§Œ μ œλŒ€λ‘œ 쓰지 λͺ»ν•˜λ©΄ μ• λ¬Όλ‹¨μ§€λ‚˜ 닀름없닀.

Maven 의 κ°€μž₯ 큰 μž₯점은 Convention Over Configuration 의 μ „λž΅μ— 따라 κ΄€λ‘€λ‘œ μ •ν•΄μ Έ μžˆλ‹€.

Convention Over Configuration ?

Convention Over Configuration(CoC)λŠ” μ„€μ • λ³΄λ‹€λŠ” 관둀라고도 ν•˜λ©° μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμžκ°€ μ •ν•΄μ•Ό ν•˜λŠ” μˆ˜λ§Žμ€ 결정듀을 쀄여주고
λ‹¨μˆœμ„±μ„ ν™•λ³΄ν•˜λ©΄μ„œ μœ μ—°ν•¨μ„ μžƒμ§€ μ•Šκ²Œ ν•˜κΈ° μœ„ν•œ 섀계 νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.

ν”„λ ˆμž„μ›Œν¬κ°€ λ³΅μž‘ν•˜κ³  λ°©λŒ€ν•΄ 짐에 따라 λ³΅μž‘ν•œ μˆ˜λ§Žμ€ μ„€μ • 파일과 μ„ΈνŒ…μ— λŒ€ν•œ 뢀담이 λŠ˜μ–΄λ‚¬κ³ 
CoC λŠ” 이λ₯Ό ν•΄κ²°ν•΄μ£ΌκΈ° μœ„ν•΄ 자주 μ‚¬μš©λ˜λŠ” 뢀뢄듀은 κ΄€λ‘€λ₯Ό μ •ν•˜μ—¬ μƒλž΅ν•˜κ³  이λ₯Ό λ”°λ₯΄μ§€ μ•ŠλŠ” κ²½μš°μ—λ§Œ 섀정을 ν•˜λ„λ‘ ν•˜κ³  μžˆλ‹€.

CoC νŒ¨λŸ¬λ‹€μž„μ„ μ μš©ν•˜λ©΄ μƒλŒ€μ μœΌλ‘œ μžμœ λ„κ°€ λ–¨μ–΄μ§„λ‹€λŠ” 의견이 μžˆμ§€λ§Œ
νŒ€μœΌλ‘œ μΌν•˜κ²Œ λ˜λŠ” νŠΉμ„±μƒ ν‘œμ€€ν™”μ™€ κ·œκ²©ν™”κ°€ 정해지지 μ•ŠλŠ”λ‹€λ©΄
κ³΅μœ μ™€ ν˜‘μ—…μ΄ νž˜λ“€μ–΄μ§€κΈ° λ•Œλ¬Έμ— 이 CoC νŒ¨λŸ¬λ‹€μž„μ„ μ μš©ν•˜λŠ” 사둀도 늘고 μžˆλ‹€.

νŠΉμ§•

  • Groovy 기반의 DSL (Domain Specific Language) μ±„μš©
  • μ˜μ‘΄μ„± 기반 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ–Έμ–΄
  • λΉŒλ“œμ˜ ꡬ쑰화
  • API 제곡
  • Multi Project λΉŒλ“œ
  • μ˜μ‘΄μ„± κ΄€λ¦¬μ˜ λ‹€μ–‘ν•œ 방법 제곡
  • Migration 의 νŽΈμ˜μ„±
  • Build Script λŠ” Groovy 둜 μž‘μ„±

참고자료

Gradle Guide - Slidershare

μ‚¬μš©

Gradle μ„€μΉ˜

Mac

# brew gradle

Ubuntu

# μ €μž₯μ†Œ μΆ”κ°€
$ add-apt-repository ppa:cwchien/gradle

# apt-get μ—…λ°μ΄νŠΈ
$ apt-get update

# Gradle μ„€μΉ˜
$ apt-get install gradle

Gradle λΉŒλ“œ

# gradle build

Gradle Build μ‹œμ— μ‹€ν–‰κ°€λŠ₯ν•œ jar λ§Œλ“€κΈ°

manifest νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ 등둝 ν•΄μ•Ό ν•œλ‹€.

참고자료

http://theeye.pe.kr/archives/2075

Gradle Task

Gradle Dependencies

api (:==compile) 와 implementation μ˜μ‘΄μ„± 차이가 크닀

api λŠ” λΉŒλ“œν›„μ— 외뢀에 ν•„μš”ν•œ μ˜μ‘΄μ„±μ„ λ…ΈμΆœν•˜κ³ 

implementation 은 λΉŒλ“œ 후에도 외뢀에 μ˜μ‘΄μ„±μ΄ λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

μ΄λŠ” μ˜μ‘΄μ„± λ…ΈμΆœμ΄ λ˜λŠ” 점의 차이도 μžˆκ² μ§€λ§Œ μ•„λž˜μ™€ μ˜μ‘΄λ„μ— λ”°λ₯Έ 같이 λΉŒλ“œ 차이점도 μ‘΄μž¬ν•œλ‹€.

api λŠ” C κ°€ μˆ˜μ •μ‹œμ— ν•΄λ‹Ή 라이브러리λ₯Ό μ˜μ‘΄ν•˜κ³  μžˆλŠ” B A λͺ¨λ‘ 재 λΉŒλ“œ ν•œλ‹€.

implementation 은 C κ°€ μˆ˜μ •μ‹œμ— ν•΄λ‹Ή 라이브러리λ₯Ό μ§μ ‘μ μœΌλ‘œ μ˜μ‘΄ν•˜κ³  μžˆλŠ” B 만 재 λΉŒλ“œ ν•œλ‹€.

Java Library plugin - μ˜μ‘΄μ„± μ„ μ–Έ μ„€μ •

μ„€μ •λͺ… Role Consumable Resolvable μ„€λͺ…
api API μ˜μ‘΄μ„± μ„ μ–Έ N N μ»΄νŒŒμΌμ„ μœ„ν•΄μ„œ ν•„μš”ν•œ μ˜μ‘΄μ„±μ„ μ„ μ–Έν•œλ‹€.
implementation κ΅¬ν˜„ν™” μ˜μ‘΄μ„± μ„ μ–Έ N N 외뢀에 λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ μ˜μ‘΄μ„±μ„ μ„€μ •ν•œλ‹€.
compileOnly
runtimeOnly
testImplementation
testCompileOnly
testRuntimeOnly