๐ง Project
๋ชจ๋ Gradle์ build๋ ํ๋ ์ด์์ project๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
project๊ฐ ๋ํ๋ด๋ ๊ฒ์ Gradle์ ์ฌ์ฉํ์ฌ ์ํํ๋ ์์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์๋ฅผ ๋ค์ด project๋ library JAR ํน์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ๋ด๊ฑฐ๋,
๋ค๋ฅธ projects๋ก๋ถํฐ ์์ฑ๋ JAR๋ค์ ํฉ์ณ์ ๋ฐฐํฌ๋ ZIP์ ๋ํ๋ผ ์ ์์ต๋๋ค.
๋ํ staging ํน์ production ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๋ฑ์ ์ํํด์ผ ํ ์์ ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
๐ง Task
project์์ ์ํํ ์ ์๋ ์์ ์ ํ๋ ์ด์์ task์ ์ํด ์ ์๋ฉ๋๋ค.
Tasks๋ ๋น๋์ ์ํํ๋ ์์์ (atomic)์ธ ์์ ์ ๋ํ๋ ๋๋ค.
์๋ฅผ ๋ค์ด ์์ ์ ์ผ๋ถ ํด๋์ค๋ค์ ์ปดํ์ผํ๊ฑฐ๋, JAR์ ์์ฑํ๊ฑฐ๋, Javadoc์ ์์ฑํ๊ฑฐ๋, ์ผ๋ถ archives๋ฅผ repository์ ๊ฒ์ํ๋ ๋ฑ์ ์์ ์ผ ์ ์์ต๋๋ค.
๐ง Plugin
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ task๋ค์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ํ์๊ฐ ์๋๋ก plugin์ ํตํด ์ ๊ณต๋ฉ๋๋ค.
(์๋ฅผ ๋ค์ด ์๋ฐ๋ฅผ ์ปดํ์ผํ๋ ๋ฑ์ ์์ ์ java plugin์์ ์ ๊ณต๋ฉ๋๋ค.)
project์ plugin์ ์ ์ฉํ๋ฉด, project์์๋ ํด๋น plugin์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋์ฑ ์์ธํ ์ ๋ณด๋ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๐ง ์ฌ์ฉํด๋ณด๊ธฐ
Gradle project๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ์ผ ํฉ๋๋ค.
gradle init
gradle command not found ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด?
> brew install gradle
์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์ธ์ง๊ฐ ๋์ต๋๋ค.
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4]
๊ฐ๊ฐ์ ์ข ๋ฅ์ ๋ฐ๋ฅธ ์ค๋ช ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
gradle์ ๊ตฌ์ฑ์์๋ฅผ ๊ฐ๋จํ ์ดํด๋ณผ ๊ฒ์ด๋ฏ๋ก ์๋ฌด๊ฒ๋ ์๋ basic์ ์ ํํ๊ฒ ์ต๋๋ค.
๋ค์์ผ๋ก ๋น๋ ์คํฌ๋ฆฝ๋๋ฅผ ์์ฑํ ์ธ์ด๋ฅผ ์ ํํ์ฌ์ผ ํฉ๋๋ค.
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2]
์ ๋ groovy๋ฅผ ์ ํํ๊ฒ ์ต๋๋ค.
๋ค์์ผ๋ก๋ project์ ์ด๋ฆ ์ค์ ์ ๋๋ค.
Project name (default: gradle-study):
์์๋ก ์ง์ด์ฃผ์ธ์.
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด 5๊ฐ์ ํ์ผ์ด ์์ฑ๋๋๋ฐ, ์ด๋ค ๊ฐ๊ฐ์ ๋ํด์๋ ๋ค์ ๊ธ์์ ์์๋ณด๊ฒ ์ต๋๋ค.
gradle ๋ช ๋ น์ ํตํด gradle์ ๋น๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
gradle ๋ช ๋ น์ ํ์ฌ ๊ฒฝ๋ก์์ build.gradle ํ์ผ์ ์ฐพ์ต๋๋ค.
build.gradle ํ์ผ์ ๋น๋ ์คํฌ๋ฆฝํธ(build script)๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
์ ํฌ๋ ๋น๋ ์คํฌ๋ฆฝํธ์ project์, ํด๋น project์ task๋ค์ ์ ์ํ ์ ์์ต๋๋ค.
์ฐ์ build.gradle์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
Gradle์์ Task๋ฅผ ์คํํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
gradle [ํ์คํฌ ์ด๋ฆ]
์ฆ ์์ hello๋ผ๋ Task๋ฅผ ์คํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํฉ๋๋ค.
gradle hello
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
> Task :hello
Hello world!
BUILD SUCCESSFUL in 369ms
1 actionable task: 1 executed
๐ฑ ์ฌ๋ฌ task ์คํํ๊ธฐ
์ฌ๋ฌ๊ฐ์ task๋ฅผ ์คํํ ์๋ ์์ต๋๋ค.
gradle [ํ์คํฌ1 ์ด๋ฆ] [ํ์คํฌ2 ์ด๋ฆ] [ํ์คํฌ3 ์ด๋ฆ]
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด 3๊ฐ์ ์์ ์ ์คํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
tasks.register('hello') {
println 'hello'
}
tasks.register('my') {
println 'my'
}
tasks.register('name is') {
println 'name is'
}
๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ ์ ์์ต๋๋ค.
gradle hello my 'name is'
๐ง ์ผ๋ฐ Task
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๊ฑฐ๋, ํน์ ๋๋ถ๋ถ์ Gradle plugin์์ ์ ๊ณต๋๋ task๋ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๐ป build
build ์์ ์ ๋ชจ๋ ์์ฑ๋ฌผ๋ค์ ์กฐ๋ฆฝ(assembing)ํ๊ณ , ๊ฒ์ฌ(check)๋ฅผ ์คํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
๐ป run
์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
๐ป check
ํ ์คํธ์ ๋ฆฐํ (linting, ์์ค์ฝ๋ ๋ถ์) ๋ฑ์ ํฌํจํ์ฌ ๋ชจ๋ ๊ฒ์ฆ(verification) ์์ ์ ์คํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
๐ป clean
build directory์ ์กด์ฌํ๋ ๋ด์ฉ์ ์ญ์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
์ด์ธ์๋ ๋ ์์ผ๋, ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๐ง Task Dependencies(์์กด์ฑ)
๋ค๋ฅธ Task์ ์์กดํ๋ Task๋ฅผ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์กด์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
dependsOn 'ํ ์คํฌ ์ด๋ฆ'
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
tasks.register('intro') {
dependsOn tasks.hello
doLast {
println "I'm Gradle"
}
}
intro ์์ ์ ์คํ(gradle intro)ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
> Task :hello
Hello world!
> Task :intro
I'm Gradle
BUILD SUCCESSFUL in 401ms
2 actionable tasks: 2 executed
์์กด์ฑ์ ์ถ๊ฐํ ๋์๋ ํด๋น ์์ ์ด ์์์ ์ ์๋์ด ์์ ํ์๊ฐ ์์ต๋๋ค.
์ฆ ๋ค์๋ ๊ฐ๋ฅํฉ๋๋ค.
tasks.register('intro') {
dependsOn tasks.hello
doLast {
println "I'm Gradle"
}
}
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
์ด๋ฏธ ์กด์ฌํ๋ task๋ฅผ ์กฐ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
tasks.register('hello') {
doLast {
println 'original do Last'
}
}
tasks.named('hello') {
doLast {
println 'add do last 1'
}
}
tasks.named('hello') {
doLast {
println 'add do last 2'
}
}
tasks.named('hello') {
doFirst {
println 'add do first 1'
}
}
์์ ๊ฐ์ด ์์ฑํ ํ, hello๋ฅผ ์คํํ๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
> Task :hello
add do first 1
original do Last
add do last 1
add do last 2
BUILD SUCCESSFUL in 451ms
1 actionable task: 1 executed
๋ค์๊ณผ ๊ฐ์ด ํจ์๋ฅผ ์ ์ํ๊ณ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
tasks.register('hello') {
doLast {
println decorate('hello world')
}
}
private String decorate(String message) {
return "**" + message + "**"
}
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
tasks.register('hello') {
doLast {
println decorate('hello world')
}
}
private String decorate(String message) {
return "**" + message + "**"
}
๐ Reference
https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:projects_and_tasks
Build Script Basics
You run a Gradle build using the gradle command. The gradle command looks for a file called build.gradle.kts in the current directory. We call this build.gradle.kts file a build script, although strictly speaking it is a build configuration script, as we w
docs.gradle.org
https://docs.gradle.org/current/userguide/command_line_interface.html
Command-Line Interface
You can customize many aspects about where build scripts, settings, caches, and so on through the options below. Learn more about customizing your build environment. -b, --build-file (deprecated) Specifies the build file. For example: gradle --build-file=f
docs.gradle.org
'๐ Gradle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Gradle] api์ implementation์ ์ฐจ์ด (feat. java-libraly ํ๋ฌ๊ทธ์ธ) (0) | 2023.04.16 |
---|---|
[Gradle] ์๋ฐ ํ๋ฌ๊ทธ์ธ (0) | 2023.04.15 |
[Gradle] Dependency Configuration์ด๋? (0) | 2023.04.15 |
[Gradle] ์์กด์ฑ ๊ด๋ฆฌ(Dependency management)๋? (0) | 2023.04.15 |
[Gradle] Gradle Wrapper(gradlew์ gradle.bat)์ settings.gradle (0) | 2023.04.14 |