Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์„ฑ ๋ฐ ๋นŒ๋“œํ•˜๊ธฐ

2023. 2. 26. 19:14ยทTool/Gradle

Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํฌ๊ธฐ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ตฌ์กฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ด ์žฅ์—์„œ๋Š” Gradle ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค๋ช…์„œ์—์„œ๋Š” ์ด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋‹จ์ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์—ฌ๋Ÿฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋Š” ๋ณ„๋„์˜ Gradle ๋นŒ๋“œ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” Gradle์„ ์‚ฌ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ ๊ตฌ์กฐํ™” ์žฅ ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Creating a multi-project build

Gradle์˜ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์—๋Š” ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ์™€ ๋‹จ์ผ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ app์ด๋ผ๋Š” ๋‹จ์ผ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Example 1. Basic multi-project build

.
โ”œโ”€โ”€ app
โ”‚   ...
โ”‚   โ””โ”€โ”€ build.gradle.kts
โ””โ”€โ”€ settings.gradle.kts

Gradle ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. build init ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋˜ํ•œ ์ด ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋Š” ์Šค์ผˆ๋ ˆํ†ค ํ”„๋กœ์ ํŠธ(๋‹จ์ผ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ฃจํŠธ ํ”„๋กœ์ ํŠธ์—๋Š” Gradle ๋นŒ๋“œ ํŒŒ์ผ์ด ์—†์œผ๋ฉฐ ํฌํ•จํ•  ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

settings.gradle.kts

rootProject.name = "basic-multiproject"
include("app")

์ด ๊ฒฝ์šฐ Gradle์€ ์•ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋นŒ๋“œ ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

gradle projects ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

> gradle -q projects

------------------------------------------------------------
Root project 'basic-multiproject'
------------------------------------------------------------

Root project 'basic-multiproject'
\--- Project ':app'

To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :app:tasks

app ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์šฉ ํ•˜๊ณ  ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ Java ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

app/build.gradle.kts

plugins {
    id("application")
}

application {
    mainClass.set("com.example.Hello")
}

app/src/main/java/com/example/Hello.java

package com.example;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์‹คํ–‰ ์ž‘์—…์„ ์‹คํ–‰ํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

> gradle -q run
Hello, world!

์ด๊ฒƒ์ด ๊ธฐ๋ณธ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๊ฐ„๋‹จํ•œ ์ง€์ž…๋‹ˆ๋‹ค.

Adding subprojects

์ด์ „์— ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์— lib๋ผ๋Š” ๋‹ค๋ฅธ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ์„ค์ • ํŒŒ์ผ์— ๋‹ค๋ฅธ include ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

settings.gradle.kts

rootProject.name = "basic-multiproject"
include("app")
include("lib")

๊ทธ๋Ÿฐ ๋‹ค์Œ Gradle์€ ํ”„๋กœ์ ํŠธ์˜ lib/ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ƒˆ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

Example 2. Multi-project build with two subprojects

.
โ”œโ”€โ”€ app
โ”‚   ...
โ”‚   โ””โ”€โ”€ build.gradle.kts
โ”œโ”€โ”€ lib
โ”‚   ...
โ”‚   โ””โ”€โ”€ build.gradle.kts
โ””โ”€โ”€ settings.gradle.kts

๋‹ค์Œ์œผ๋กœ, ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„์— ๋นŒ๋“œ ๋…ผ๋ฆฌ ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„œ๋กœ ์ข…์†๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

Naming recommendations

ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์ด๋ฆ„ ์ง€์ •๊ณผ ์ผ๊ด€์„ฑ์ด ์ ์  ๋” ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์œ ์ง€: ์„ค์ • ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ํด๋”์— ์†ํ•˜๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ์ถ”๊ฐ€ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์ผ€๋ฐฅ ๋Œ€์†Œ ๋ฌธ์ž ํ˜•์‹ ์‚ฌ์šฉ : ์ผ€๋ฐฅ ๋Œ€์†Œ ๋ฌธ์ž ํ˜•์‹์€ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์†Œ๋ฌธ์ž์ด๊ณ  ๋‹จ์–ด๊ฐ€ ๋Œ€์‹œ ( '-') ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„ ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค (์˜ˆ : kebab-case-formatting). ์ด๊ฒƒ์€ ์ด๋ฏธ ๋งŽ์€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ์‹ค์ƒ์˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Gradle์€ ์ผ€๋ฐฅ ์ผ€์ด์Šค ์ด๋ฆ„์— ๋Œ€ํ•œ ์ด๋ฆ„ ์•ฝ์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ค์ • ํŒŒ์ผ์—์„œ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ •์˜: 'rootProject.name'์€ ๋นŒ๋“œ ์Šค์บ”๊ณผ ๊ฐ™์€ ๋ณด๊ณ ์„œ์— ์‚ฌ์šฉ๋˜๋Š” ๋นŒ๋“œ ์ „์ฒด์— ์ด๋ฆ„์„ ํšจ๊ณผ์ ์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฆ„์€ ๋ถˆ์•ˆ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์ด ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ฒดํฌ์•„์›ƒํ•  ์ˆ˜ ์žˆ์Œ).
728x90
'Tool/Gradle' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Gradle] ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋นŒ๋“œ ๋กœ์ง ๊ณต์œ  (Sharing Build Logic between Subprojects)
  • [Gradle] ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„์˜ ์ข…์†์„ฑ ์„ ์–ธ(Declaring Dependencies between Subprojects)
  • [Gradle] ๋นŒ๋“œ ์ˆ˜๋ช… ์ฃผ๊ธฐ
  • Gradle 8.0.1 Release Notes(๋ณ€๊ฒฝ๋œ ์ )
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
    ์˜ค๋Š˜์˜๋‰ด์Šค
    ํƒœ๊ตญ
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
    ํ€˜์ŠคํŠธ
    ๋ธŒ๋ฆฌํ•‘
    ๋‰ด์Šค
    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์„ฑ ๋ฐ ๋นŒ๋“œํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”