[Gradle] gradle 5.x jar deploy to nexus
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