상세 컨텐츠

본문 제목

Maven Build java.lang.NoClassDefFoundError 처리

Spring

by 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 에 입력하세요.


반응형

관련글 더보기

댓글 영역