New Score :0
High Score :0
Run Best
NICE BUSINESS TYPE INDICATOR
3. ๊ธ์ ์ ์น๊ตฌ์๊ฒ ๋น๋ ธ๋๋ฐ ์ค๋์ด ๋์ ์ฃผ๊ธฐ๋ก ํ๋ .. ๊ทธ๋ฐ๋ฐ ์นด๋๊ฐ์ ๋ด์ผํ๋ ๋ ๋ ์ค๋์ธ๋ฐ... ์ด๊ฑธ ์ด์ฉ๋...
4. ์ฐ๋ฆฌ ํ์ฌ๋ ์ค์ํ ์์ฌ ๊ฒฐ์ ์ ํ ๋?
5. ์ด์ฌํ ์ผํ ๋๋ฅผ ์ํ ์ ๋ฌผ์ ์ฃผ๊ณ ์ถ๋ค. ์ด๋ค๊ฒ ์ข์๊น?
6. ์ํ์์ ํฌ์์ํ์ ์ถ์ฒ๋ฐ์๋ค. ์ด๋ค๊ฑธ ๊ฐ์ ํ์ง?
7. ํ์ฌ์์์ ๋๋?
8. ๊ฟ์์ ๊นจ์ด๋๋ 20๋ ์ ์ผ๋ก ๋์๊ฐ๋ค. ๋น์ ์ด ์ ์ผ ๋จผ์ ํ๋์ผ์?
9. ๋ด๊ฐ ์ธ์ฌ ๋ด๋น์๋ผ๋ฉด ์ ๊ท ์ ์ฌ์ ์ฑ์ฉ ์ ์ ์ผ ์ค์ํ๊ฒ ๋ณด๋๊ฒ์?
10. ํ์ฌ์ ์ ๋ง ์ซ์ดํ๋ ๋๋ฃ๊ฐ ์๋ค๋ฉด?
11. ๊ฐ๋ํ ์ง์ ๊ฐ์ฅ์ด ๋์๋ค.. ์๋ ์ ์์ผ ๋ ์ ๋ฌผ์?
12. ํ์ ํ์ฌ ์ถ๊ทผ ์คํ์ผ์?
13.ํ์ฌ ์ฒด์ก๋ํ ํ๋ ๋ ์ด๋ค. ์ค๋ ๋ญํ์ง?
14. ๋์ ์ ๋ฌด ์คํ์ผ์?
Project dependencies
ํ ํ๋ก์ ํธ๊ฐ ์ปดํ์ผ ํด๋์ค ๊ฒฝ๋ก์์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์์ฑ ํ jar๋ฅผ ํ์๋กํ๋ค๋ฉด ์ด๋จ๊น์? ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ ์ด ์ข ์์ฑ๋ ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒํด์ผํฉ๋๊น? ๋ถ๋ช ํ ์ด๊ฒ์ Java ๋ค์ค ํ๋ก์ ํธ ๋น๋์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๋ค. ํ๋ก์ ํธ ์ข ์์ฑ์์ ์ธ๊ธํ๋ฏ์ด Gradle์ ์ด์ ๋ํ ํ๋ก์ ํธ ์ข ์์ฑ์ ์ ๊ณตํฉ๋๋ค.
Example 1. Project dependencies
.
โโโ buildSrc
โ ...
โโโ api
โ โโโ src
โ โ โโโ...
โ โโโ build.gradle.kts
โโโ services
โ โโโ person-service
โ โโโ src
โ โ โโโ...
โ โโโ build.gradle.kts
โโโ shared
โ โโโ src
โ โ โโโ...
โ โโโ build.gradle.kts
โโโ settings.gradle.kts
์ฐ๋ฆฌ๋ ํ๋ก์ ํธ, API ๋ฐ ๊ฐ์ธ ์๋น์ค๋ฅผ ๊ณต์ ํฉ๋๋ค. ๊ฐ์ธ ์๋น์ค ํ๋ก์ ํธ๋ ๋ค๋ฅธ ๋ ํ๋ก์ ํธ์ ์ข ์๋ฉ๋๋ค. api ํ๋ก์ ํธ๋ ๊ณต์ ํ๋ก์ ํธ์ ์ข ์๋์ด ์์ต๋๋ค. ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋น๋ ์คํฌ๋ฆฝํธ์ ์ํด ์ฃผ์ ๋ ๊ฒ์ด ์์ต๋๋ค. : ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ๊ฒฝ๋ก๋ฅผ ์ ์ํฉ๋๋ค. ํ๋ก์ ํธ ๊ฒฝ๋ก ์ ์์ ๋ํ ์์ธํ ๋ด์ฉ์ Settings.include(java.lang.String[])์ DSL ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
settings.gradle.kts
rootProject.name = "dependencies-java"
include("api", "shared", "services:person-service")
buildSrc/src/main/kotlin/myproject.java-conventions.gradle.kts
plugins {
id("java")
}
group = "com.example"
version = "1.0"
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
}
api/build.gradle.kts
plugins {
id("myproject.java-conventions")
}
dependencies {
implementation(project(":shared"))
}
shared/build.gradle.kts
plugins {
id("myproject.java-conventions")
}
services/person-service/build.gradle.kts
plugins {
id("myproject.java-conventions")
}
dependencies {
implementation(project(":shared"))
implementation(project(":api"))
}
๊ณต์ ๋น๋ ๋ ผ๋ฆฌ๋ ํ๋ก์ ํธ ์ข ์์ฑ๋ ์ ์ํ๋ ํ์ ํ๋ก์ ํธ์ ๋น๋ ์คํฌ๋ฆฝํธ์ ์ ์ฉ๋๋ ๊ท์น ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ถ์ถ๋ฉ๋๋ค. ํ๋ก์ ํธ ์ข ์์ฑ์ ์คํ ์ข ์์ฑ์ ํน์ํ ํํ์ ๋๋ค. ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ๋จผ์ ๋น๋๋๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ์ ํด๋์ค๊ฐ์๋ jar๋ฅผ ํด๋์ค ๊ฒฝ๋ก์ ์ถ๊ฐํฉ๋๋ค. ๋ํ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ข ์์ฑ์ ํด๋์ค ๊ฒฝ๋ก์ ์ถ๊ฐํฉ๋๋ค. gradle :api:compile์ ํธ๋ฆฌ๊ฑฐ ํ ์ ์์ต๋๋ค. ๋จผ์ ๊ณต์ ํ๋ก์ ํธ๊ฐ ๋น๋๋ ๋ค์ API ํ๋ก์ ํธ๊ฐ ๋น๋๋ฉ๋๋ค. ํ๋ก์ ํธ ์ข ์์ฑ์ ์ฌ์ฉํ๋ฉด ๋ถ๋ถ์ ์ธ ๋ค์ค ํ๋ก์ ํธ ๋น๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Depending on artifacts produced by another project
ํ๋ก์ ํธ ์ข ์์ฑ์ ๋ชจ๋ ๊ฐ์ ์ข ์์ฑ์ ๋ชจ๋ธ๋งํฉ๋๋ค. ํจ๊ณผ์ ์ผ๋ก, ๋น์ ์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ฃผ์ ์ถ๋ ฅ์ ์์กดํ๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก JAR ํ์ผ ์ธ Java ๊ธฐ๋ฐ ํ๋ก์ ํธ์์.
๋๋ก๋ ๋ค๋ฅธ ์์ ์์ ์์ฑ๋ ์ถ๋ ฅ์ ์์กดํด์ผ ํ ์ ์์ต๋๋ค. ์ฐจ๋ก๋ก, ๋ฐ๋ก ๊ทธ ์ถ๋ ฅ์ ์์ฑํ๊ธฐ ์ํด ์์ ์ด ๋ฏธ๋ฆฌ ์คํ๋์๋์ง ํ์ธํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ํ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ์์ ์์กด ๊ด๊ณ๋ฅผ ์ ์ธํ๋ ๊ฒ์ ์ด๋ฌํ ์ข ๋ฅ์ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋งํ๋ ์ข์ง ์์ ๋ฐฉ๋ฒ์ด๋ฉฐ ๋ถํ์ํ ๊ฒฐํฉ์ ๋์ ํฉ๋๋ค. ์ด๋ฌํ ์ข ์์ฑ์ ๋ชจ๋ธ๋งํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ์ถ๋ ฅ์ ์์ฑํ๊ฑฐ๋, "๋๊ฐ๋" ์ํฐํฉํธ๋ก ํ์ํ๊ฑฐ๋, ์๋น ํ๋ก์ ํธ์์ ์์กดํ ์ ์๋ ๊ธฐ๋ณธ ์์ค ์งํฉ์ ์ถ๋ ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
๋ ๊ฐ์ ํ์ ํ๋ก์ ํธ ์์ฐ์์ ์๋น์์ ํจ๊ป ๋ค์ค ํ๋ก์ ํธ ๋น๋์์ ์์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ ํ๋ก์ ํธ ์์ฐ์๋ ๋น๋ ์ ๋ณด(์: ํ๋ก์ ํธ ๋ฒ์ )๊ฐ ํฌํจ๋ ์์ฑ ํ์ผ์ ์์ฑํ๋ buildInfo๋ผ๋ ์์ ์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๊ณต๊ธ์๋ฅผ ์ถ๋ ฅ ํ์ผ์ ๋งคํํ๋ฉด Gradle์ด ์๋์ผ๋ก ์์ ์ข ์ ํญ๋ชฉ์ ์ค์ ํฉ๋๋ค.
Example 2. Task generating a property file containing build information
build.gradle.kts
plugins {
id("java-library")
}
version = "1.0"
val buildInfo by tasks.registering(BuildInfo::class) {
version.set(project.version.toString())
outputFile.set(layout.buildDirectory.file("generated-resources/build-info.properties"))
}
sourceSets {
main {
output.dir(buildInfo.map { it.outputFile.asFile.get().parentFile })
}
}
buildSrc/src/main/java/BuildInfo.java
public abstract class BuildInfo extends DefaultTask {
@Input
public abstract Property<String> getVersion();
@OutputFile
public abstract RegularFileProperty getOutputFile();
@TaskAction
public void create() throws IOException {
Properties prop = new Properties();
prop.setProperty("version", getVersion().get());
try (OutputStream output = new FileOutputStream(getOutputFile().getAsFile().get())) {
prop.store(output, null);
}
}
}
์๋น ํ๋ก์ ํธ๋ ๋ฐํ์์ ์์ฑ ํ์ผ์ ์ฝ์ ์ ์์ด์ผ ํฉ๋๋ค. ์์ฑ ํ๋ก์ ํธ์ ๋ํ ํ๋ก์ ํธ ์ข ์์ฑ์ ์ ์ธํ๋ฉด ๋ฏธ๋ฆฌ ์์ฑ์ ๋ง๋ค๊ณ ๋ฐํ์ ํด๋์ค ๊ฒฝ๋ก์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Example 3. Declaring a project dependency on the project producing the properties file
build.gradle.kts
dependencies {
runtimeOnly(project(":producer"))
}
์์ ์์์ ์๋น์๋ ์ด์ ์์ฐ์ ํ๋ก์ ํธ์ ์ถ๋ ฅ์ ๋ํ ์ข ์์ฑ์ ์ ์ธํฉ๋๋ค.
๋ค๋ฅธ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ถ๋ ฅ ์ํฐํฉํธ์ ๋ฐ๋ผ ํ๋์ ์์ผ๋ฟ์ ๋๋ค. Gradle์๋ ํ๋ก์ ํธ๊ฐ์ ์์์ ์ํฐํฉํธ๋ฅผ ๊ณต์ ํ๊ณ Gradle์ด ํ์์ ๋ฐ๋ผ ๋น๋ ํ ์์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ข ์์ฑ ๊ด๋ฆฌ ์์ง ์ค ํ๋๊ฐ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ ๊ฐ ์ถ๋ ฅ ๊ณต์ ์ ๋ํ ์น์ ์ ์ฐธ์กฐํ์ธ์.