Maven 3.3.9 Compile Error
서비스를 운영 중인 우분투 서버에서 Maven 장애가 발생하여 확인해보니 Application Source를 Compile 하기위해 mvn 명령어를 사용했을 때 다음과 같은 에러가 발생하였다.
Jul 31, 2017 4:48:22 PM org.apache.maven.cli.logging.impl.UnsupportedSlf4jBindingConfiguration activate
WARNING: The SLF4J binding actually used is not supported by Maven: org.slf4j.impl.JDK14LoggerFactory
Jul 31, 2017 4:48:22 PM org.apache.maven.cli.logging.impl.UnsupportedSlf4jBindingConfiguration activate
WARNING: Maven supported bindings are:
Jul 31, 2017 4:48:22 PM org.apache.maven.cli.logging.impl.UnsupportedSlf4jBindingConfiguration activate
WARNING: (from jar:file:/usr/local/bin/maven/lib/maven-embedder-3.3.9.jar!/META-INF/maven/slf4j-configuration.properties)
- ch.qos.logback.classic.LoggerContext
- org.slf4j.helpers.Log4jLoggerFactory
- org.slf4j.impl.SimpleLoggerFactory
정상적으로 실행되었을 경우엔 Build 결과가 BUILD FAILURE 또는 BUILD SUCCESS로 출력되어야 하는데 아예 build를 시작하지 못하는 것으로 확인되었다.
관련 정보를 찾아보니 3.3.x 버전 부터 발생하는 이슈사항으로 확인되었고, 위와 같은 에러는 대부분 color logging 처리를 하기위해 설정을 수정한 후 발생하였다고 한다. 버전 문제인지 확인하기 위해 상위버전과 하위버전으로 업/다운 그레이드를 해봤지만 마찬가지로 같은 문제가 발생하였다.
결국엔 모든 데이터를 백업하고 우분투를 재설치한 뒤 3.5.0 버전으로 다시 설치하여 해결하였다. 이전에 운영중인 서버를 가상화를 통해 재구성하는 작업을 진행하고 있었는데 미리 스냅샷을 만들어놔서 큰 무리없이 마무리하였다.
리눅스에서의 해결방법은 찾지 못했지만 MacOS의 경우는 다음과 같은 방법을 통해 해결한 사례를 찾을 수 있었다. 이 경우는 MacOS의 패키지 관리자를 통한 upgrade 이후 위와 같은 Compile 문제가 발생하였다고 한다.
brew는 MacOS의 패키지 관리자인데 다음의 과정을 통해 해결하였다고 한다.
maven 삭제 후 재설치
brew uninstall maven
brew install homebrew/versions/maven32
brew pin homebrew/versions/maven32
~/.bash_profile에 M2_HOME 설정
export M2_HOME=~/usr/local/Cellar/maven32/3.2.5
Tool들을 사용하기에 앞서 안정성과 호환성을 잘 알아두는 것이 위와 같은 문제를 사전에 예방하기 위한 좋은 방법인 것 같다.
Trouble Shooting
원인
PDF 파일의 정제 및 가공을 위해 java class 파일을 생성하였고, apache tika 라이브러리를 컴파일 할 때 참조하기 위해 $JAVA_HOME 하위의 /jre/lib/ext 경로로 옮겨서 사용하고 있었다.
이후 maven에서 사용하는 slf4j 라이브러리의 경로와 apache tika의 slf4j 라이브러리 경로가 일치하지 않아 발생한 문제였다.
m2 repository에서 확인해보니 slf4j가 다수의 버전이 생성되어 있었던 것을 확인할 수 있었다.
해결
$JAVA_HOME/jre/lib/ext 하위경로에서 java 설치시 기본으로 생성된 jar 파일을 제외하고 모두 삭제하였다. 외부 라이브러리를 필요로하는 java 컴파일의 경우 -classpath 옵션을 사용하기로 하였다.
※ 참고 문헌
stackoverflow, maven 3.3.9 slf4j error, https://stackoverflow.com/questions/42844730/maven-error-the-slf4j-binding-actually-used-is-not-supported-by-maven
stackoverflow, maven 3.3.9 slf4j error, https://stackoverflow.com/questions/29848324/maven-error-java-lang-noclassdeffounderror-org-slf4j-helpers-markerignoringba/33480934