kotlin + spring boot 배포 jar 실행 오류 (ClassNotFoundException)

조갱·2023년 1월 15일
0

이슈 해결

목록 보기
9/15
post-thumbnail

사이드 프로젝트를 빌드 후, 서버에 올리려고 하는데 jar 파일이 실행이 안된다,,
해결한 방법과, 시도했던 방법들에 대해 적어본다.

실무에서는 jenkins와 같이 CI/CD 환경이 구축돼있다보니 이런 기본적인것부터 막히는게 한심하지만 ㅠㅠ 사이드 프로젝트를 진행하면서 기초부터 경험을 쌓아본다.

(이전에도 같은 이슈때매 한참 고생하다 해결했는데, 그새 까먹어서 이번에는 기록을 해야겠다.)

해결 방법

실행 가능한 jar 파일 만들기

  1. 우측 gradle 탭에서 멀티 모듈의 bootJar을 실행한다.
  1. 프로젝트의 멀티모듈/build/libs 폴더에서 생성된 jar파일을 실행한다.

(실패했지만) 시도했던 방법

MainClass 명 변경하기

build artifact로 jar를 만들었었다.

Application의 진입점을 보면

@SpringBootApplication
@ConfigurationPropertiesScan
class ConsumerApplication

fun main(args: Array<String>) {
    runApplication<ConsumerApplication>(*args)
}

이렇게 돼있다. 반면에, project artifact 설정에서는
ConsumerApplicationKt를 기본 패키지명으로 두고있다.

Kt가 달라서 안되나 싶어서 project artifact 설정에서
진입점을 ConsumerApplication으로 설정했으나, 여전히 안됐다.

생각해보니까, kotlin을 java 코드로 변환하면

public final class ConsumerApplicationKt {
   public static final void main(@NotNull String[] args) {
      Intrinsics.checkNotNullParameter(args, "args");
      String[] args$iv = (String[])Arrays.copyOf(args, args.length);
      int $i$f$runApplication = false;
      Intrinsics.checkExpressionValueIsNotNull(SpringApplication.run(ConsumerApplication.class, (String[])Arrays.copyOf(args$iv, args$iv.length)), "SpringApplication.run(T::class.java, *args)");
   }
}

이렇게 변환된다 ㅎㅎ,, 그래서 클래스 명은 ConsumerApplicationKt가 맞다.


터미널에서 실행된 모습 ㅠㅠ

profile
A fast learner.

0개의 댓글