jitPack으로 라이브러리 배포하기
내가 개발한 무언가를 라이브러리로 만들어서 배포하고 싶을때 jitPack을 활용하면 간단하게 할 수 있다. 그런데 불행히도 공식 문서가 약간 부족한 느낌이고 블로그도 제대로 정리된게 없는것 같아 몇 자 적어본다.
1. 배포할 라이브러리 개발
우선 Github Repository를 만들어서 코드를 올린다. 여기까지는 되어있어야 한다. 예제로 간단히 오늘 날짜를 조회할 수 있는 DataService를 만들어봤다고 치자. (언어는 코틀린이다.)
@Component
class DateService {
fun getBaseDate(): LocalDate {
return LocalDate.now()
}
fun getBaseDateTime(): LocalDateTime {
return LocalDateTime.now()
}
}
2. build.gradle 설정
maven publish 플러그인 추가
plugins {
id("org.springframework.boot") version "2.7.4"
id("io.spring.dependency-management") version "1.0.14.RELEASE"
id("maven-publish") //추가
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21"
}
Archive(jar file) classifier 제거
빌드 결과물에 -plain 같이 의도치 않은 postfix가 자꾸 붙어서 강제로 제거해줬다.
tasks.jar {
enabled = true
// Remove `plain` postfix from jar file name
archiveClassifier.set("")
}
Publish 설정
아래 Repository에 방문해보면 전체 소스가 있다.
publishing {
repositories {
maven {
url = uri("https://github.com/morot2/date-util")
}
}
publications {
register("mavenJava", MavenPublication::class) {
from(components["java"])
artifact(sourcesJar.get())
}
}
}
3. Release 생성
Github Repository가면 우측에서 Release를 확인할 수 있다. 아직 생성한 Release가 없으면 새로 만들면 된다. 이건가? 하고 몇 번 눌러보면 간단히 새로운 Release Tag를 생성할 수 있다.
4. jitPack으로 패키지 등록
여기까지 했으면 https://jitpack.io/ 에 접속해서 패키지를 등록하자. 메인에 크게 input box가 하나 있는데 여기에 repository 주소를 넣으면 된다. github.com/morot/date-util에서 github.com~ 이하를 넣으면 된다. 그 뒤 Look up을 누르면 알아서 내 Repository를 뒤져 최신 Release를 패키지로 등록해준다.
만약 빌드 중 오류가 발생하면 Log 아이콘이 빨간색으로 뜬다. Report를 눌러서 어느 부분에 문제가 있었는지 확인할 수 있다. 성공적으로 등록됐다면 Get it 버튼이 뜰 것이다. 누르면 라이브러리 의존 설정 코드가 복사된다.
5. 적용(사용할 프로젝트)
패키지가 잘 등록되었는지 직접 다른 프로젝트에 적용해보자. 우선 jitPack Maven Repository를 추가해준다.
repositories {
mavenCentral()
maven{
url = uri("https://jitpack.io")
}
}
그 다음 라이브러리 의존성을 추가해준다. 위(jitPack 메인)에서 Get it 버튼을 눌러서 복사하면 된다.
implementation("com.github.morot2:date-util:1.0.3")
이제 끝이다. 아래와 같이 DataService 라이브러리를 잘 불러와서 코드에서 사용할 수 있는지 확인해보면 된다.
import org.springframework.stereotype.Component
import com.solshar.util.date.DateService
import java.time.LocalDate
@Component
class Producer(val dateService: DateService){
fun getYesterday(): LocalDate {
val today = dateService.getBaseDate()
return today.minusDays(1)
}