사내 모듈 Gradle Cache 없이 배포 받기

또리·2023년 4월 4일

JAVA

목록 보기
3/3

서론

문제점

내부적으로 개발중인 모듈 중에 수시 배포가 이루어져 동일한 버전임에서 모듈이 변경되야하는 라이브러리가 있다.

배포 버전은 0.1.1-SNAPSHOT으로 FIX해서 사용하고 있는데
처음에는 implementation "com.example:demo:0.1.1-SNAPSHOT" 일 경우 0.1.1-SNAPSHOT 중에서 가장 최신 버전의 모듈을 받아올 줄 알았다.

  • SNAPSHOT은 지정된 버전 하위로 timestamp 값이 붙어서 지속적으로 모듈이 추가된다.
  • ex) 0.1.1-SNAPSHOT 으로 버전을 지정할 경우 0.1.1-20230404.044534-7 명으로 Nexus3에 등록된다.

하지만 아무리 새로운 모듈을 Nexus3에 publish해도 최신 버전을 받아오지 않는 다는 것을 알았다.
이유는 gradle은 기본적으로 24시간동안 종속성의 버전을 캐시하기 때문이다.

그렇기 때문에 수동으로 .gradle/cache/ 의 디렉토리를 날려주거나 dependency를 refresh 해주지 않으면 24시간 동안은 동일한 모듈을 사용했다.

해결 방법

1. 동적 버전을 선언하자

plugins {
    id 'java-library'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework:spring-web:5.+'
}

1.0.0, 1.1.0, 1.2.0 이런식으로 버전이 생성될 경우 1+ 로 버전을 작성하면 최신 버전을 확인할 수 있다.

2. 임계 값을 구성하자

configurations.all {
    resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes'
    resolutionStrategy.cacheChangingModulesFor 4, 'hours'
}

Gradle이 동적 버전의 확인된 버전을 캐시하는 시간을 변경하려면 cacheDynamicVersionsFor를 사용한다. 또한 변경하는 모듈에 대한 메타 데이터, 아티팩트를 캐시하는 시간을 변경하려면 cacheChangingModulesFor를 사용한다.

필자는 동적 버전과 임계 값을 이용해서 항상 최신 버전의 라이브러리를 받아오도록 구성했다.

남은 과제

모든 dependency에 대해서 임계치 캐시 값이 적용되는지 확인할 필요가 있다.

참고 문서

dynamic_versions.html

profile
공인중개사를 공부하는 금융 개발자

0개의 댓글