[안드로이드 멀티 모듈] 11. JvmLibraryConventionPlugin 만들기

2024. 12. 19. 11:00·안드로이드/멀티 모듈
반응형

지난 포스트에서는 Room 데이터베이스를 위한 AndoridRoomConventionPlugin을 만들었습니다.

이번 시간에는 안드로이드에 의존성이 없는 모듈을 위한 JvmLibraryConventionPlugin을 만들겠습니다.
해당 플러그인은 도메인 모듈 등에서 사용하게 될 것입니다.

JvmLibraryConventionPlugin이 추가된 모습

1. configureKotlinJvm 유틸 함수 만들기

build-logic 모듈의 Kotlin 파일에 Kotlin과 JVM 설정을 하기 위한 Project.configureKotlinJvm 이라는 유틸 함수를 만들겠습니다.

configureKotlinJvm 함수는 Java 11을 사용하도록 설정하는 역할을 합니다. build-logic 모듈에서만 사용할 것 이므로 internal 키워드를 추가해주었습니다.

// Kotlin.kt

internal fun Project.configureKotlinJvm() {
    extensions.configure<JavaPluginExtension> {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    configureKotlin()
}

// 예전에 만들었던 함수
private fun Project.configureKotlin() {
    tasks.withType<KotlinCompile>().configureEach {
        kotlinOptions {
            jvmTarget = JavaVersion.VERSION_11.toString()
        }
    }
}

2. JvmLibraryConventionPlugin 만들기

그 후, JvmLibraryConventionPlugin을 아래처럼 만들었습니다. 위에서 만든 유틸함수를 호출하고 있는 모습입니다.

// JvmLibraryConventionPlugin.kt

class JvmLibraryConventionPlugin: Plugin<Project> {

    override fun apply(target: Project) {
        target.run {
            pluginManager.apply("org.jetbrains.kotlin.jvm")

            configureKotlinJvm()
        }
    }
}

3. JvmLibraryConventionPlugin 적용하기

Gradle에게 특정 id로 컨벤션 플러그인을 인식할 수 있도록 해야합니다.
libs.versions.toml 파일에 id를 정의하고 build-logic 모듈에 위에서 만든 컨벤션 플러그인을 등록합니다.

// libs.versions.toml

[plugins]
multi-module-jvm-library = { id = "multi.module.jvm.library", version = "unspecified" }
...
// build.gradle.kts (Mobule :build-logic:convention)

...

gradlePlugin {
   plugins {  
      register("jvmLibrary") {
         id = "multi.module.jvm.library"
         implementationClass = "JvmLibraryConventionPlugin"
      }
      ...
   }
}


그 후, home:domain 모듈에 해당 컨벤션 플러그인을 적용하겠습니다. 제가 만든 domain 모듈은 안드로이드에 의존성이 없는 모듈이기 때문입니다.

// build.gradle.kts (Module :home:domain)

plugins {
    alias(libs.plugins.multi.module.jvm.library)
}

4. 정리

안드로이드에 의존성이 없고 순수 Java/Kotlin로 생성된 모듈을 위한 JvmLibraryConventionPlugin을 만들었습니다.

최근 안드로이드에서는 클린 아키텍처로 구성된 프로젝트가 많습니다. 그리고 domain 레이어를 분리해서 사용하는 경우가 많은데, 이러한 domain 레이어는 안드로이드에 의존성이 없도록 만드는 것이 원칙입니다.

그래서 JvmLibraryConventionPlugin을 만들게 되었습니다.

이번 포스팅의 결과물은 아래 Github Repository의 11-JvmLibraryConventionPlugin 브랜치를 확인하시면 됩니다.

 

GitHub - taein8935/multi-module-template-aos

Contribute to taein8935/multi-module-template-aos development by creating an account on GitHub.

github.com

저작자표시 비영리 변경금지 (새창열림)

'안드로이드 > 멀티 모듈' 카테고리의 다른 글

[안드로이드 멀티 모듈] 10. AndroidRoomConventionPlugin 만들기  (0) 2024.12.16
[안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기  (1) 2024.08.26
[안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기  (0) 2024.08.19
[안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기  (0) 2024.08.12
[안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기  (1) 2024.08.07
'안드로이드/멀티 모듈' 카테고리의 다른 글
  • [안드로이드 멀티 모듈] 10. AndroidRoomConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기
  • [안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기
코딩덕
코딩덕
안드로이드, 리액트 등의 개발 노하우와 최신 AI 기술을 다루는 기술 블로그입니다. 실무 중심의 경험을 바탕으로 마주한 문제와 해결 과정을 체계적으로 기록하며, 개발자에게 실질적으로 도움 되는 프로그래밍 팁과 인사이트를 쉽고 명확하게 공유하고자 합니다.
  • 코딩덕
    개발자가 들려주는 IT 이야기
    코딩덕
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 안드로이드 (62)
        • 멀티 모듈 (11)
        • 클린 아키텍처 (11)
        • 트러블 슈팅 (5)
        • 코틀린 (3)
        • 코루틴 (2)
        • Compose (1)
        • Compose UI (6)
        • Compose Dialog (8)
        • Compose Paging3 (11)
        • Compose State (2)
        • Util (1)
      • Github (3)
        • PR Template (2)
        • AI Code Review (1)
      • 리액트 (1)
        • NextJs (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코틀린
    ViewModel
    flow
    트러블슈팅
    MutableState
    pager
    jsonadapter
    안드로이드
    LazyRow
    UI Layer
    Clean Architecture
    Usecase
    enum class
    sealed class
    Github
    Jetpack Compose
    pr template
    recyclerview
    Dialog
    멀티 모듈
    데이터 레이어
    클린 아키텍처
    paging3
    코루틴
    OnBackPressedDispatcher
    ScrollView
    dynamic json
    Gradle
    ai code review
    multi module
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩덕
[안드로이드 멀티 모듈] 11. JvmLibraryConventionPlugin 만들기
상단으로

티스토리툴바