[Gradle] ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋นŒ๋“œ ๋กœ์ง ๊ณต์œ  (Sharing Build Logic between Subprojects)

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

Convention Plugins

์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์—๋Š” ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋Š” ๋ฌธ์„œํ™” ์ „์šฉ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ’ˆ์งˆ ๊ทœ์น™์€ ๋ชจ๋“  ์ฝ”๋“œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋˜์ง€๋งŒ ์„ค๋ช…์„œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์‹œ์—, ํ•˜๋‚˜์˜ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๊ณต์œ ํ•˜๋Š” ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๋ฅธ ๋ชฉ์ ์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - ๊ทธ๋“ค์€ ๊ทธ๋“ค์„ ๋”์šฑ ์ฐจ๋ณ„ํ™”ํ•˜๋Š” ๋‹ค๋ฅธ ์•„ํ‹ฐํŒฉํŠธ ์œ ํ˜•์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

, for example:

  • public libraries - libraries that are published to some repository
  • internal libraries - libraries on which other subprojects depend on internally within the project
  • command line applications - applications with specific packaging requirements
  • web services - applications with specific packaging requirements that are different from above
  • etc

์ผ๋ถ€ ๋‹ค๋ฅธ ์ฝ”๋“œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋Š” ํ…Œ์ŠคํŠธ ๋ชฉ์  ๋“ฑ์œผ๋กœ ์ „์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ํŠธ๋ ˆ์ดํŠธ๋Š” ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ ์œ ํ˜•์€ ํ”„๋กœ์ ํŠธ์— ์–ด๋–ค ํŠน์„ฑ์ด ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

 

๋นŒ๋“œ ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” Gradle์˜ ๊ถŒ์žฅ ๋ฐฉ๋ฒ•์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ ์œ ํ˜•์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Gradle ํ•ต์‹ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋ธ๋ง ๋ฉ๋‹ˆ๋‹ค (์˜ˆ : Java ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ผ๋ฐ˜ Java ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ˜๋ฉด Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‚ด๋ถ€์ ์œผ๋กœ Java ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์šฉ ํ•˜๊ณ  Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ธก๋ฉด์„ ์ถ”๊ฐ€๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค). ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Java ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋ฐฐํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์šฉํ•˜๊ณ  ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

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

 

์ปจ๋ฒค์…˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์†Œ์Šค ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŠน์ˆ˜ buildSrc ๋””๋ ‰ํ† ๋ฆฌ์— ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. buildSrc์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ buildSrc๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋…ผ๋ฆฌ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

 

๊ทœ์น™ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋…ผ๋ฆฌ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ์ƒ˜ํ”Œ์„ ์‚ดํŽด๋ณด์„ธ์š”.

 

์ปจ๋ฒค์…˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์˜ ๋˜ ๋‹ค๋ฅธ ๋ณต์žกํ•˜๊ณ  ์‹ค์ œ์ ์ธ ์˜ˆ๋Š” Gradle Build Tool ์ž์ฒด์˜ ๋นŒ๋“œ ์ž…๋‹ˆ๋‹ค.

 

Cross project configuration

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

๊ทœ์น™ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ž˜ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ต์ฐจ ๊ตฌ์„ฑ์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋‘ ๊ฐ€์ง€ ์šฉ๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” ๋‹ค๋ฅธ ๊ตฌ์„ฑ์„ ํŠน์ • ์œ ํ˜•์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ข…์ข… ๊ต์ฐจ ๊ตฌ์„ฑ ์„น์…˜์€ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๊ฐ€ X ์œ ํ˜• ์ธ ๊ฒฝ์šฐ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ Y๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ X-conventions ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ์ง์ ‘ ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ํŠน์ • ์œ ํ˜•์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฐœ์‹  ๊ตฌ์„ฑ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

728x90
'Tool/Gradle' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Gradle] 8.0.2 ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ(๋ณ€๊ฒฝ๋œ ์ )
  • [Gradle] ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„์˜ ์ข…์†์„ฑ ์„ ์–ธ(Declaring Dependencies between Subprojects)
  • Gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์„ฑ ๋ฐ ๋นŒ๋“œํ•˜๊ธฐ
  • [Gradle] ๋นŒ๋“œ ์ˆ˜๋ช… ์ฃผ๊ธฐ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, 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] ํ•˜์œ„ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋นŒ๋“œ ๋กœ์ง ๊ณต์œ  (Sharing Build Logic between Subprojects)
์ƒ๋‹จ์œผ๋กœ

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