JavaRush /Java Blog /Random-KO /Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ
Viacheslav
๋ ˆ๋ฒจ 3

Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์†Œ๊ฐœ

์ด๋ฒˆ ๋ฆฌ๋ทฐ์˜ ์ฃผ์ œ๋Š” Gradle ์ž๋™ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์˜์–ด๋กœ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ Build Tools ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 1์ด๊ฒƒ์ด ์™œ ํ•„์š”ํ•œ๊ฐ€์š”? Java๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๋…ธ๋™ ์ง‘์•ฝ์ ์ธ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜์กดํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Habrรฉ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๊ธฐ์‚ฌ์ธ " ๋ช…๋ น์ค„์—์„œ Java ์ž‘์—… " ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์กฐ๋งŒ๊ฐ„ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ์ด๋ฏธ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๋ชจ๋‘๊ฐ€ ๋‹ค์‹œ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” ๋ฐ˜๋ฉด, ๋‹ค์†Œ ํ‘œ์ค€ํ™”๋œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Gradle์˜ ๋Œ€์•ˆ์€ Maven ์ž๋™ํ™” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์€ ํ•œํŽธ์œผ๋กœ๋Š” ๋‹ค๋ฅด์ง€๋งŒ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ๋งŽ์€ ์œ ์‚ฌ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Gradle ์›น์‚ฌ์ดํŠธ์—๋Š” " Maven์—์„œ Gradle๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ " ์ด๋ผ๋Š” ์ฃผ์ œ์— ๋Œ€ํ•œ ์ž๋ฃŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Gradle๊ณผ Maven์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ด€์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Gradle์€ ์„œ๋กœ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ ์ผ์ข…์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Maven์€ ํŠน์ • "๋ชฉํ‘œ"๊ฐ€ ์ฒจ๋ถ€๋œ ํŠน์ • ๋‹จ๊ณ„์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉํ‘œ๋Š” ์ผ๋ถ€ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๋ชจ๋‘ ๋™์ผํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ๋„ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Gradle์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Gradle์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Google ๋˜๋Š” Yandex์—์„œ "Gradle Build Tool"์„ ์ž…๋ ฅํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ์— ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์ธ https://gradle.org ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค . ๊ธฐ๋ณธ Gradle ํŽ˜์ด์ง€์—๋Š” Gradle ๋ฌธ์„œ ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” "Docs"๋ผ๋Š” ํ…์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ๋จผ์ € Gradle์„ ์„ค์น˜(Install)ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฌธ์„œ์˜ " Gradle ์„ค์น˜ " ์„น์…˜์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "๊ตฌ์‹" ๋ฐฉ๋ฒ•์„ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ(โ€œ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ โ€). ์ง€์นจ์— ๋”ฐ๋ผ gradle-5.1.1-bin.zip๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ–๋Š” " ๋ฐ”์ด๋„ˆ๋ฆฌ ์ „์šฉ " ์œ ํ˜•์˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ์•„์นด์ด๋ธŒ์˜ ์••์ถ•์„ ํ’€๊ณ  ์ง€์นจ์— ๋”ฐ๋ผ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ์ง€์นจ์„ ์‹คํ–‰ํ•œ ํ›„ ๋ช…๋ น์ด gradle -v์„ค์น˜๋œ Gradle์˜ ๋ฒ„์ „์„ ํ‘œ์‹œํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ์‹œ์Šคํ…œ์ด ์›ํ•˜๋Š” ์œ„์น˜๊ฐ€ ์•„๋‹Œ Gradle์„ ์ฐพ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(*nix์—๋Š” ์œ ์‚ฌ ํ•ญ๋ชฉ์ด ์žˆ์Œ). for %i in (gradle.bat) do @echo. %~$PATH:i ์ด์ œ ์ต์ˆ™ํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 2

Gradle ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”

์ €๋Š” Gradle์ด ์ž‘์—… ์ด๋ผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž„์„ ์ฆ‰์‹œ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค (๋‚˜๋Š” ์ด๋ฅผ ์ž‘์—…์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค). ์ž‘์—…์€ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์— ์˜ํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค . ๊ณต์‹ ๋ฌธ์„œ " Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ " ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค . Gradle์„ ์„ค์น˜ํ•  ๋•Œ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "ํ•ต์‹ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ" ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ๋‹ค์–‘ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” " ์œ ํ‹ธ๋ฆฌํ‹ฐ " ์นดํ…Œ๊ณ ๋ฆฌ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ธํŠธ์—๋Š” Gradle ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ œ๊ณตํ•˜๋Š” " Build Init Plugin " ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ์œ ํ˜• " java-application "์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Gradle ์ž‘์—…์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. gradle init --type java-application ์˜ˆ๋ฅผ ๋“ค์–ด Groovy DSL(Gradle์šฉ ํ‘œ์ค€ ์ž‘์—… ์„ค๋ช… ์–ธ์–ด) ๋ฐ JUnit ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์งˆ๋ฌธ์— ๋‹ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๋ฆฌ๋ทฐ์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค). ์ƒ์„ฑ ํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ ์„ธํŠธ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 3
์ฒซ์งธ, ์ดˆ๊ธฐํ™” ํ›„ Gradle ๋ฒ„์ „์— ๋งž๊ฒŒ ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ํŠน์ˆ˜ ๋ž˜ํผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ˆ˜ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ์ธ " The Gradle Wrapper " ๋ฅผ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค . ๋‘˜์งธ, Gradle ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์ธ build.gradle ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ, ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์„ค๋ช…ํ•˜๋Š” ๊ธฐ๋ณธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์ธ " Build Script Basics " ์—์„œ ์ด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค .
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 4

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ์ž‘์—…

์ด์ œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ์„น์…˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
plugins {
    id 'java'
    id 'application'
}
์ด๋Š” ์•ž์„œ ์ด์•ผ๊ธฐํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋‹ค๋ฉด ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. Gradle ์ž‘์—… ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ด์ œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 5
์˜ˆ๋ฅผ ๋“ค์–ด, ์‹คํ–‰ํ•˜๋ฉด gradle runJava ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 6
๋ณด์‹œ๋‹ค์‹œํ”ผ ์•„๋ž˜์—๋„ ๊ฐ™์€ ๋‚ด์šฉ์ด ์ ํ˜€ ์žˆ๋Š”๋ฐ 2 actionable tasks: 1 executed, 1 up-to-date ์ด๊ฒŒ ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? ์ด๋Š” ์ด 2๊ฐœ์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ 1๊ฐœ๋Š” ์‹ค์ œ๋กœ ์™„๋ฃŒ๋˜์—ˆ๊ณ , 1๊ฐœ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ์ฆ‰, ์ƒํƒœ๊ฐ€ ํ˜„์žฌ์ด๊ณ  ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์œ„ "Dry Run"์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gradle run -m ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ž‘์—…์ด ์‹คํ–‰๋ ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 7
๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด 4๊ฐœ์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ข…์†์„ฑ ์ž‘์—… ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ž์ฒด์—๋Š” 2๊ฐœ์˜ ์ข…์†์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ compileJava ๋ฐ processResources๋„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํŠน์ • ์ˆ˜์ค€์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋กœ๊น… ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ณด๊ณ  ์‹ถ์€ ๋ฉ”์‹œ์ง€์˜ ์ค‘์š”์„ฑ์ด ๊ฒฐ์ •๋จ). ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค gradle run -i. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด ๋ฉ”์‹œ์ง€๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ " Gradle Logging " ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค . ๋ณด์‹œ๋‹ค์‹œํ”ผ, ํด๋ž˜์Šค ์ž‘์—…์€ UP-TO-DATE ์ด๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ์—ˆ์Šต๋‹ˆ๋‹ค . ์ฆ‰, ์ƒํƒœ๊ฐ€ ํ˜„์žฌ์ด๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ž‘์—…์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Gradle์—๋Š” " ์ตœ์‹  ํ™•์ธ " ๋˜๋Š” ์†Œ์œ„ ์ฆ๋ถ„ ๋นŒ๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Gradle ๋ฌธ์„œ " ์ตœ์‹  ํ™•์ธ(AKA ์ฆ๋ถ„ ๋นŒ๋“œ) "์—์„œ ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ --rerun-tasks ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉด ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, gradle run --rerun-tasks. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ž‘์—… 2๊ฐœ: ์‹คํ–‰๋œ ์ž‘์—… 2๊ฐœ ๋ณด์‹œ๋‹ค์‹œํ”ผ ์‹คํ–‰๋œ ์ž‘์—… ์ˆ˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€, ์ฆ‰ ์‹คํ–‰ ์ž‘์—… ์ž์ฒด์™€ ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ์ž‘์—…๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. , ํด๋ž˜์Šค. ํด๋ž˜์Šค๊ฐ€ ์˜์กดํ•˜๋Š” ์ž‘์—…์€ ์—ฌ๊ธฐ์—์„œ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํด๋ž˜์Šค ์ž‘์—…์ด ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜์ง€๋งŒ). ๋˜ํ•œ ๋‹ค์Œ ์ž‘์—…์— ๋Œ€ํ•ด์„œ๋„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 8

์ข…์†์„ฑ

๋ชจ๋“  ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ์ฃผ์š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ์ข…์†์„ฑ, ์ฆ‰ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ ์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์–ด์…ˆ๋ธ”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ java-application์— ๋Œ€ํ•œ gradle init ํ›„์— ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— ๋‹ค์Œ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฝ๊ฐ„์˜ ์ดํ•ด ์—†์ด๋Š” ๊ตฌํ˜„๊ณผ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? Gradle์˜ ๋ฌธ์„œ๋Š” ์ž˜ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ Gradle ๋ฌธ์„œ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ " ์ข…์†์„ฑ ๊ตฌ์„ฑ ๊ด€๋ฆฌ "๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ๊ฐ ์ข…์†์„ฑ์€ ํŠน์ • ๋ฒ”์œ„, ์ฆ‰ ์ด ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์œผ๋กœ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ์— ์˜ํ•ด ์ง€์ •๋˜๋ฉฐ ๊ฐ ๊ตฌ์„ฑ์—๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์ „ ์ •์˜๋œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์ ๋„ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ตฌ์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gradle --console plain dependencies ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ๊ณผ ํ•ด๋‹น ์ข…์†์„ฑ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gradle --console plain dependencies | find " - " ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‚˜์š”? ์—ฌ๊ธฐ์„œ๋Š” ์กฐ๊ธˆ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” "Java" ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ฌธ์„œ์™€ " ์ข…์†์„ฑ ๊ด€๋ฆฌ " ์„น์…˜ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ๋Š” "์ปดํŒŒ์ผ"์ด๋ผ๋Š” ๊ตฌ์„ฑ(์ผ๋ช… ๋ฒ”์œ„)์ด ์žˆ์—ˆ๊ณ  ์ด๋Š” "์ปดํŒŒ์ผ ์ค‘์— ํ•„์š”ํ•œ ์ข…์†์„ฑ"์„ ์˜๋ฏธํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌํ˜„์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜์–ด๋กœ ๋Œ€์ฒด๋จ). " API ๋ฐ ๊ตฌํ˜„ ๋ถ„๋ฆฌ " ์„น์…˜์—์„œ ๋Œ€์ฒด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด ์ข…์†์„ฑ์€ "์ปดํŒŒ์ผ ํด๋ž˜์Šค ๊ฒฝ๋กœ"์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋•Œ๋กœ ์šฐ๋ฆฌ๋Š” ์˜์กด์„ฑ์ด ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์— ํฌํ•จ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ์œ„ํ•ด? ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด์ ์œผ๋กœ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ jar๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ฒซ์งธ, "๊ธฐ๋ณธ์ ์œผ๋กœ"(์ฆ‰, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด) ์ด๋Ÿฌํ•œ ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ๋ฐฉ์‹์œผ๋กœ ์•„์นด์ด๋ธŒ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ณ  Gradle์€ ์ตœ์†Œํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ (์ฝ”๋“œ์—์„œ ์ถ”๊ฐ€ ์กฐ์ž‘ ์—†์ด) ํด๋ž˜์Šค ๊ฒฝ๋กœ์—์„œ jar ์•„์นด์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค( ์ž์„ธํ•œ ๋‚ด์šฉ์€ " Oracle: JAR ํŒŒ์ผ์˜ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ํด๋ž˜์Šค ์ถ”๊ฐ€ " ์ฐธ์กฐ). ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ์•„๋ฆ„๋‹ค์šด ๋ฐฉ๋ฒ•์€ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
jar ์ž‘์—… ์„ค์ •์—์„œ jar ํŒŒ์ผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ํ•ญ๋ชฉ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(" Oracle: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์  ์„ค์ • " ์ฐธ์กฐ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์ด jar์— ํฌํ•จ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์•ˆ์€ " Gradle Shadow Plugin "์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ถ์ด ๋” ํŽธํ•ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•  ๋•Œ(์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ˜๋Œ€) ํŠน๋ณ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ธ " Gradle War Plugin " ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์€ ๋™์ž‘์ด ๋‹ค๋ฅด๋ฉฐ ๊ทธ๊ณณ์—์„œ ์šฐ๋ฆฌ์˜ ์‚ถ์ด ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์— ์˜ํ•ด ๋ณ„๋„์˜ ํŠน์ˆ˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๊ทœ์ œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 9

๊ฒฐ๊ณผ

Gradle์€ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ํƒ์›”ํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Spring ๋ฐ Hibernate์™€ ๊ฐ™์€ ์ž˜ ์•Œ๋ ค์ง„ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‚ฌํ•ญ๋“ค๋งŒ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋’ค์—๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐฑ๋งŒ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๊ณผ ๊ธฐํšŒ๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Gradle์€ ๋˜ํ•œ ์ด ๋ฆฌ๋ทฐ์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์€ ๋‹ค์ค‘ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ์ง€์›ํ•˜์ง€๋งŒ Gradle ์ž์ฒด์—๋Š” " ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ƒ์„ฑ "์ด๋ผ๋Š” ํ›Œ๋ฅญํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด Gradle์˜ ๋ฌธ์„œ๊ฐ€ 5+์—์„œ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์–ด๋””๋ฅผ ๋ด์•ผ ํ• ์ง€ ์ดํ•ดํ•˜๋ฉด ํ•„์š”ํ•œ ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋ณด์—ฌ์ฃผ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์„ ์ดํ•ดํ•˜๋ฉด ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Gradle์—๋Š” ํ›Œ๋ฅญํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๋ชฉ๋ก์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
Gradle์— ๋Œ€ํ•œ ๋น ๋ฅธ ์†Œ๊ฐœ - 10
#๋น„์•„์ฒด์Šฌ๋ผํ”„
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION