maven 실행시 "Premature end of Content-Length delimited message body" 에러가 발생하고 다운로드가 안 될때..



오랫만에 자바 개발할 일이 생겨서 maven 으로 빌드중이었는데 다음과 같은 에러가 나면서 artifact 를 다운로드 받지 못하는 상황에 접했습니다.

아래 로그는 logback 에서 에러가 났지만 mvn clean package 을 해주면 다시 정상 작동하고 그후에는 다른 아티팩트를 받지 못하는 현상이 종종 발생했습니다.

ERROR] Failed to execute goal on project java-excel: Could not resolve dependencies for project com.company:java-excel:jar:1.0-SNAPSHOT: Could not transfer artifact ch.qos.logback:logback-classic:jar:1.2.3 from/to central (http://repo.maven.apache.org/maven2): GET request of: ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar from central failed: Premature end of Content-Length delimited message body (expected: 290339; received: 2270 -> [Help 1]


Stackoverflow 를 찾아봐도 ISP 회선 문제라는 의견이 보이는등 원인을 해결할 수 있는 방안은 보이지 않아서(뭐 자주 발생하는 일도 아니므로 근본적인 해결이 필요한 사안인지도 모르겠습니다.) 다시 이런 상황을 겪을 때 참고하려고 기록 차원에서 남겨둡니다.


mvn 재실행

위의 에러를 만나면 mvn 을 다시 실행하면 해결이 되는 경우가 많이 있습니다.

mvn clean package

주의할 점은 maven 은 jar 파일을 캐싱하는데 파일이 없을 경우에도 404 결과를 캐싱하므로 이럴 경우 계속 오류가 날 수 있습니다.

그럴 경우 $M2_HOME 폴더내의 캐싱한 아티팩트를 삭제해 주면 됩니다. $M2_HOME은 특별히 설정하지 않았을 경우 $HOME/.m2 이며 아래 find 명령어로 아티팩트의 캐시 디렉토리를 찾을 수 있습니다.

find ~/.m2/repository -name \*logback-classic\*


install 명령어로 아티팩트 설치

문제가 지속된다면 pom 과 jar 를 받아서 로컬 저장소에 설치해서 해결할 수 있습니다.

먼저 https://mvnrepository.com 같은 maven central 저장소에 연결하여 다운로드 받을 아티팩트를 검색합니다.

다음 예는 자바의 Date 클래스의 대체 유틸인 Joda-Time 을 검색한 화면입니다.

 

아티팩트 정보 화면에서 pom(joda-time-2.9.9.pom)과 jar(joda-time-2.9.9.jar)를 클릭해서 PC 에 다운로드한 후에 터미널을 열고 다음 명령을 실행합니다. 


mvn install:install-file -Dfile=joda-time-2.9.9.jar -DpomFile=joda-time-2.9.9.pom

정상적으로 실행되면 로컬 저장소에 설치되고 maven 빌드시에 사용할수 있게 됩니다.


같이 보기