Build Tools/Gradle

[Gradle] gradle 5.x jar deploy to nexus

김동형수 2020. 3. 6. 11:13

Intro

예전에는 공통 로직을 담당하는 모듈을 jar형태로 배포하는 방법이 있었습니다.

MSA가 등장하면서 대체되었지만 상황에 따라서는 jar형태의 라이브러리로 배포해야하는 상황이 발생할 수 있습니다.

지속적인 http통신이 부담스럽다거나 통신을 하지 않아도 될 만큼의 작업이거나, 보안상 통신을 할 수 없을 때 등

 

그런의미에서 Gradle을 사용해서 private한 nexus repository에 jar형태로 deploy하는 방법을 정리해볼까 합니다.

 

※ 작성하는 Gradle의 버전은 5.x 버전을 기준으로 합니다.


Content

jar로 빌드하면서 포함될 소스를 지정하기 위해서 gradle의 sourceSets 블럭을 사용해서 java source root와 resources  폴더를 지정해줍니다. 해당 코드는 아래와 같습니다.

sourceSets {
    main {
        java {
            srcDir 'src/main/java'
        }
        resources {
            srcDir 'src/main/resources'
        }
    }
}

그리고 maven을 이용해서 jar만들기 앞서 nexus의 인증정보를 설정해야하는데 gradle.properties 파일을 이용해서 설정해보겠습니다.

해당 프로젝트에서 build.gradle과 같은 위치에 gradle.properties 파일을 생성합니다. 그리고 nexus인증정보 및 url을 입력합니다.

gradle.properties에 작성한 내용은 build.gradle에서 사용이 가능합니다.

관련 내용은 gradle lifecycle에 대해서 찾아보시면 내용 파악하시는데 도움이 되실 것 같습니다.

nexusUsername=여기에 nexus ID
nexusPassword=여기에 nexus Password
nexusUrl=여기에 nexus URL

마지막으로 gradle의 publish task를 사용해서 nexus에 jar형태로 deploy하기 위한 설정을 해보겠습니다.

gradle에서 nexus로 배포하기 위해서 maven-publish 플러그인을 사용합니다. 

 

내용은 아래와 같습니다.

apply plugin: 'maven-publish'
publishing {
    publications {
        maven(MavenPublication) {
            groupId = group
            artifactId = rootProject.name
            version = version

            artifact("build/libs/$rootProject.name-$version"+".jar") {
                extension 'jar'
            }
        }
    }
    repositories {
        maven {
            name 'nexus'
            url project.nexusUrl
            credentials {
                username project.nexusUsername
                password project.nexusPassword
            }
        }
    }
}

아티팩트의 이름은 동적으로 바뀌게 하기 위해서 버전과 루트프로젝트 명을 사용했습니다.

 

앞에서 gradle.properties에 등록해놓은 nexus관련한 정보는 project객체를 이용해서 접근 후 사용할 수 있습니다.


설정을 마치고 아래의 task들을 이용하면 nexus로 업로드되는 것을 확인하실 수 있습니다.

gradle clean build publish

Finish

공통기능을 담당하는 코드 및 리소스들을 여러 프로젝트에서 사용하는 방법에 대해서 고민하다 jar 형태로 라이브러리를 제공하는 방식을 적용해봤습니다.

 

gradle을 사용한지 얼마 되지않아서 스스로 작성하기 보다는 다른분들의 코드를 Copy & Paste 하는 수준이지만 정리하면서 나중에 같은 문제로 시간소모를 절약하고 같은 고민을 하는 다른분들에게 도움이 되기를 바랍니다.


Reference

https://blog.leocat.kr/notes/2018/11/01/nexus-publish-jar-artifact-with-gradle

Sample Code

https://github.com/kim-ddongs/gradle-jar-to-nexus