티스토리 뷰

반응형

내가 Spring boot가 아닌 일반 Maven Project를 실행가능한 Jar 파일로 만들기 위해 겪었던 고생을 작성해본다.

 


 

나의 Maven 프로젝트의 상황

- java8

- 외부 라이브러리가 포함되어 있음(kafka-client, jsch 등)

- 웹이 아닌 java 프로젝트

 

 

 

첫번째 시행착오

Java 프로젝트 구현 끝내고, 그냥 maven install 하여, jar 파일 실행

결과

 Main 클래스를 찾을 수 없다고 나옴 

 

* 아래 캡쳐화면은 maven project에서 mvn install 실행 후, 생성된 jar 파일을 실행했을 때 나온 에러 메시지로 Manifest 속성이 없다고 나온다.

 

 

 

두번째 시행착오 

Main클래스를 찾으려면, Manifest가 있어야 한다고 해서, Maven에 Manifest를 plugin으로 추가하였다.

 

[ Manifest 추가 ]

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>Main</mainClass>
                <addClasspath>true</addClasspath>
                <addExtensions>true</addExtensions>
            </manifest>
        </archive>
    </configuration>
</plugin>

결과

dependency 한 외부 라이브러리를 찾지 못함

 

* 아래 캡쳐 화면은 java.lang.NoClassDefFoundError 에러 메시지로, jsch 라이브러리를 프로젝트에서 사용하고 있는데, 찾지 못한다는 얘기다.

 

 

최종

Manifest만 plugin 한 경우에는 프로젝트에서 사용하는 외부 라이브러리가 자동적으로 추가되지 않는다고 한다. 

그래서 dependency한 외부 라이브러리를 자동으로 추가해주기 위해 plugin을 추가하였다. 

 

[ 외부 라이브러리 자동으로 추가할 수 있도록 plugin 설정 ]

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

결과

잘된다!!

 

 

 

pom.xml 파일에 작성한 plugins 

 

 

 

참고 사이트

https://www.devkuma.com/docs/maven/maven-jar-plugin-%EC%8B%A4%ED%96%89-%EA%B0%80%EB%8A%A5%ED%95%9C-jar-%EC%83%9D%EC%84%B1/

 

Maven 입문 | Java 응용 프로그램 개발 | maven-jar-plugin 실행 가능한 Jar 생성

앞장에서 프로그램의 실행은 간단히 했지만 아직 완전하지 않다. target 폴더에 패키지된 Jar 파일이 생성되었지만, 이를 그대로 실행하려고 하면 동작하지 않는다. 예를 들어, 아래와 같이 명령을

www.devkuma.com

 

https://huskdoll.tistory.com/561

 

Maven Build java.lang.NoClassDefFoundError 처리

Maven으로 build할때 별다른 설정없이 build하면 내가 개발한 프로그램에서 사용하는 jar파일이 같이 묶이지 않습니다. (한마디로 내가 mysql DB에 접속하는 프로그램을 짜서 빌드하면 mysql-connector-java-

huskdoll.tistory.com


 

항상 springboot만 쓰다가 이렇게 springboot 가 아닌 프로젝트를 단순하게라도 진행하면, 모르는게 더 많고, 해결하는데 더 오래걸리는 것 같다 ... 

 

이제라도 springboot 가 아닌 mven project의 실행가능 jar 파일 생성을 알아서 다행이다! 라고 나를 위로해야징..

 

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함