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