티스토리 뷰
내가 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://huskdoll.tistory.com/561
항상 springboot만 쓰다가 이렇게 springboot 가 아닌 프로젝트를 단순하게라도 진행하면, 모르는게 더 많고, 해결하는데 더 오래걸리는 것 같다 ...
이제라도 springboot 가 아닌 mven project의 실행가능 jar 파일 생성을 알아서 다행이다! 라고 나를 위로해야징..
'etc' 카테고리의 다른 글
[JAVA] JAVA 로 SCP 실행하는 방법 (jSch 라이브러리) (0) | 2022.07.05 |
---|---|
[ Docker ] Docker 외부 포트 설정 (직접 명령어 & REST API 적용) (0) | 2022.07.05 |
[ wireshark ] 와이어샤크(wireshark) 사용법 (0) | 2022.06.10 |
[ java ]날짜 String -> ZonedDateTime 변환 (0) | 2022.05.30 |
[Docker] 원격으로 Docker Container 조작하기 (REST API 방식 통신 방법) (0) | 2022.04.27 |