기록하는 습관

[Spring] Gradle (1) - maven -> gradle 변경 본문

개발/Spring

[Spring] Gradle (1) - maven -> gradle 변경

로그뉴 2022. 7. 12. 16:15
  •  
maven gradle  
id 'io.spring.dependency-management' version '1.0.11.RELEASE'

springboot & gradle version

  • 기존 datacenter spring boot version: 1.5.4
  • 시도한 gradle version: 7.x → 빌드는 되지만, jar를 실행하면 "기본 클래스를 로드할 수 없습니다." 에러발생

 

  • bootRepackage: 1.5 까지 사용된 스프링 부트 태스크
  • bootJar(or bootWar): 스프링 부트 2.0 부터 스프링 부트 gradle 플러그인에서는 bootRepackage가 각각 jar 태스크를 확장한 bootJar war 태스크를 확장한 bootWar로 분리되었다.
    • bootJar 는 jar 태스크를, bootWar 는 war 태스크를 비활성화한다.
  • springboot 1.5.4 version은 gradle 3.x version을 필요로 한다.
  • 적용한 gradle: 3.4.1
    • 주의: Junit5를 사용하기 위해서는 최소 Gradle 4.7 이상이어야 함.

 

 

참고

  • build.gradle 작성시, buildscript - plugins - apply plugin 순서를 지켜야 함. (바로가기)
  • gradle 공식문서 (바로가기)

에러

  1. cannot find symbol
    1. 원인: compile 또는 runtime시 해당 라이브러리를 읽을 수 없어서 발생하는 문제.
    2. 해결: build.gradle에 implementation xxx, 또는 runtimeOnly xxx등의 의존성을 추가해준다.
  2. 기본 클래스 com.smilegate.datacenter.Application을(를) 찾거나 로드할 수 없습니다.
    1. 원인: mainClassName을 인식할 수 없어서 발생하는 문제. classpath가 잘못되어 있을 가능성도 있음
    2. 절차
      1. jar 압축을 푼 뒤, 실제 class-path가 어떻게 정의 되어 있는지 확인
        1.  
      2. jar 실행되는 프로젝트와의 차이점(기본 build.gradle로 진행시)
        1. 공통: springboot 1.5 version
        2. 차이
          1. gradle version (3.4.1 vs 7)
          2. jar.original 이 생성 되냐 안되냐 차이
      3. springboot version 별로 지원되는 gradle version 이 다르고, gradle 문법이 version마다 다르기 때문에 gradle 7.x → 3.4.1로 적용해주기
      4. .gradle 폴더를 확인해보니 적용되지 않는 것을 확인
      5. gradle cache 삭제
        1. .gradle/cache 내부의 폴더 삭제
        2. ./gradlew build --refresh-dependencies
    3. 해결
      1. gradle 3.4.1 version으로 변경
      2. build.gradle 파일 - org.springframework.boot plugin 추가
      3. build.gradle 파일 - bootRepackage에 MainClass 선언 추가
    4. 참고: 링크

build.gradle 설명

 

의존성 확인하기

  • maven
    • $mvn dependency:tree
  • gradle
    • $gradle dependencies
Comments