관리 메뉴

피터의 개발이야기

[Kotlin] Spring 멀티모듈, JAR 파일로 배포하는 방법 본문

Programming/Kotlin

[Kotlin] Spring 멀티모듈, JAR 파일로 배포하는 방법

기록하는 백앤드개발자 2024. 8. 22. 10:10
반응형

ㅁ 들어가며

[Kotlin] Spring Boot 멀티모듈 프로젝트 구성하기를 수행하였다.

ㅇ Kotlin 멀티모듈 프로젝트를 개발하다 보면 특정 모듈을 다른 프로젝트에서 재사용하고 싶을 때가 있다. 

ㅇ 이때 해당 모듈을 JAR 파일로 배포하면 편리하게 참조할 수 있다. 

ㅇ 이 글에서는, Kotlin 멀티모듈 프로젝트에서 Gradle을 설정하여 특정 모듈을 JAR 파일로 배포하는 방법을 정리하였다.

 

ㅁ 프로젝트 구조

ㅇ 멀티 모듈 프로젝트는 일반적으로 다음과 같은 구조를 가진다

kotlin-multi-module
│
├── build.gradle.kts
├── settings.gradle.kts
│
├── common
│   ├── build.gradle.kts
│   └── src/main/kotlin/com/peterica/common
├── core
│   ├── build.gradle.kts
│   └── src/main/kotlin/com/peterica/core
│
├── rest
│   ├── build.gradle.kts
│   └── src/main/kotlin/com/peterica/rest
│
└── domain
    ├── build.gradle.kts
    └── src/main/kotlin/com/peterica/domain

ㅇ common은 util, enum, error code와 같은 기초 정보를 담고 있다.

ㅇ 여기서는 common을 JAR 파일로 배포한다고 가정하자.

 

ㅁ 모듈 build.gradle.kts 설정

ㅇ 모듈의 build.gradle.kts 파일을 수정하여 JAR 파일을 생성할 수 있도록 설정한다.

ㅇ manifest으로 메타데이터의 내용을 설정한다.

 

ㅁ JAR 파일 생성

# 프로젝트 루트에서 gradle 명령어 실행
./gradlew :module-a:build

ㅇ 인텔리제이, 혹은 프로젝트 루트에서 gradle 빌드를 수행 할 수 한다.

ㅇ common/build/libs/ 디렉토리에 JAR 파일이 생성된다.

 

ㅁ JAR 파일 배포

ㅇ 생성된 로컬 복사, Maven 저장소 등록, Nexus or Artifactory 같은 원격 저장소에 배포할 수도 있다.

 

로컬 파일 시스템에 복사 후 참조방법

[Spring] springboot 외부 JAR 추가하기에 정리하였다.

 

Maven 로컬 저장소에 설치 

./gradlew :module-a:publishToMavenLocal

ㅇ JAR 파일을 Maven 로컬 저장소에 설치하면, 다른 프로젝트의 build.gradle.kts에서 쉽게 참조할 수 있다.

 

repositories {
    mavenLocal()
}

dependencies {
    implementation("com.example:module-a:1.0.0")
}

ㅇ 다른 프로젝트의 build.gradle.kts에서 위와 같이 참조한다.

 

원격 저장소에 배포하는 방법

ㅇ 원격 저장소로는 일반적으로 Nexus Repository Manager나 Artifactory를 사용한다. 먼저, 원격 저장소에 접근할 수 있는 계정과 URL을 준비해야 한다.

plugins {
    kotlin("jvm") version "1.8.0"
    `maven-publish`
}

group = "com.example"
version = "1.0.0"

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"])
        }
    }
    repositories {
        maven {
            name = "myRepo"
            url = uri("http://your-nexus-repo-url/repository/maven-releases/")
            credentials {
                username = project.findProperty("nexusUsername") as String? ?: "defaultUsername"
                password = project.findProperty("nexusPassword") as String? ?: "defaultPassword"
            }
        }
    }
}

 

Gradle 명령어로 배포

./gradlew :module-a:publish

ㅇ 이 명령어는 module-a를 빌드하고, 설정된 원격 저장소에 JAR 파일을 업로드한다.

 

다른 프로젝트에서 참조

원격 저장소에 배포된 JAR 파일을 다른 프로젝트에서 참조하려면, 해당 프로젝트의 build.gradle.kts에 다음과 같이 추가한다.

repositories {
    maven {
        url = uri("http://your-nexus-repo-url/repository/maven-releases/")
    }
}

dependencies {
    implementation("com.example:module-a:1.0.0")
}

ㅇ 이렇게 설정하면 다른 프로젝트에서 module-a의 기능을 사용할 수 있다.

 

ㅁ 함께 보면 좋은 사이트

 스프링 멀티모듈 나누기 개념 및 실습(메이븐, 그래들)

  ㄴ 멀티모듈 구성부터 jar 참조 테스트 수행

[Server] 멀티 모듈을 설계하는 관점과 고려사항 with Spring & Gradle
  ㄴ 인프콘 2023에서 발표한 내용

  ㄴ 발표자료는 여기, 예시는 깃허브

반응형
Comments