Spring
Maven Build java.lang.NoClassDefFoundError 처리
husks
2016. 11. 22. 18:20
반응형
Maven으로 build할때 별다른 설정없이 build하면 내가 개발한 프로그램에서 사용하는 jar파일이 같이 묶이지 않습니다.
(한마디로 내가 mysql DB에 접속하는 프로그램을 짜서 빌드하면 mysql-connector-java-5.1.14-bin.jar 파일이 같이 묶이지 않아서 실행이 안됌)
그렇기 때문에 java 명령어를 실행할 때 java.lang.NoClassDefFoundError 에러가 발생합니다.
자바를 실행할때 jar파일을 다운받아서 cp(classpath) 옵션으로 jar경로를 다 적어주면 해결이 됩니다.
(java -cp /test/lib/mysql-connector-java-5.1.14-bin.jar:/test/lib/Test-0.0.1-SNAPSHOT.jar kr.co.test.MainApplication)
하지만 의존하는 jar가 많다면 명령문이 길어지게 됩니다.
그래서 다른 방법이 있는데 그 방법은 프로그램에 jar파일을 shade(음영) 하는 방법입니다.
한마디로 Maven Build 할때 내가 짠 소스와 사용했던 jar까지 한꺼번에 묶는 방식 입니다.
(이러한 형식을 "uber-jar"라 부릅니다.) => 꼭 Maven에 국한된 용어는 아닙니다.
해당 방법은 POM에 아래소스를 추가하면 됩니다. (build 태그 부분)
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
아래 이미지를 참고하여 pom.xml 에 입력하세요.
반응형