스프링부트 gradle build 실패
인텔리제이에서 스프링부트 프로젝트를 만든 후 ./gradlew build를 사용했는데 계속 에러가 나면서 build를 실패했다. 에러의 내용은 다음과 같다.
자바 컴파일 에러
Task :compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> invalid source release: 11
compileJava.... 사실 원래 자바 8을 사용하다가 11로 변경했는데 그게 문제라고 하는 것 같긴 했다.
그래도 설정파일에서 전부 11로 바꾸고 build.gradle도 11로 설정하고 그냥 스프링 띄우고 웹에서 사용하는 것은 이때까지 전혀 문제가 없었다. 테스트코드도 문제없이 실행이 잘 됐었기 때문에 전혀 문제가 없다고 생각했었다.
이 문제를 관련해서 정말 많이 찾아보고 질문도 해보면서 정말 많은 시간을 버렸는데 어디에서도 관련된 글을 찾아볼 수가 없었다... 개발자의 흔한 삽질...
혹시나 싶어서 번뜩 떠오른 것이 환경변수였다. 자바 8을 설치하면서 환경변수를 설정했던 것 같은데 11로 넘어오면서는 환경변수를 건드리지 않았었다. 아무래도 IDE를 사용해서 개발하다보니 환경변수를 신경쓰지 못하고 지냈던 것이다.
환경변수 설정은 당연하게도 자바 8로 되있었고 이걸 11로 바꾸니까 깔끔하게 해결되었다. 언제 그랬냐는 듯이 깔끔하게 build가 되면서 개비스콘마냥 암덩이리가 사르륵 녹는 느낌이었다..!
DefaultCacheAwareContextLoaderDelegate 에러
build를 했는데 DefaultCacheAwareContextLoaderDelegate에러가 나오면서 실패하는 경우도 있었다.
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804
Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275
Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100
정확하게는 이런 에러가 나타났는데 이건 통합테스트를 위해서 스프링을 띄웠는데 연결되는 DB가 실행되있지 않아서 나타나는 에러였다.
필자의 경우는 테스트코드에서 h2디비를 사용하고 있었는데 h2를 띄우고 다시 build하면 문제없이 잘 실행되었다.
no main manifest attribute in 에러
이건 build된 jar파일에서 처음 호출 할 Main메소드를 찾지 못했다는 것이다. 인터넷을 찾아보니 자료는 거의 없고 여러가지 설명들이 있었는데 필자가 겪은 문제는 -plain.jar파일이 실행되는 문제였다. 스프링부트 2.5버전 이상의 사용자라면 필자와 같은 문제일 수도 있다.
스프링부트 2.5이상부터는 build를 했을 때 jar파일이 2개가 생성된다. 일반 jar파일과 -plain.jar파일이다. 일반 jar파일은 프로젝트의 내용과 의존성에 대한 내용을 모두 담아서 배포된 파일이지만 -plain.jar파일은 의존성을 제외하고 프로젝트에 있는 자원들로만 만들어진 파일이다.
-plain.jar파일이 생성되지 않도록 하기 위해서는 build.gradle에 다음의 내용을 추가하면 된다.
jar {
enabled = false
}
이 내용을 추가하면 jar파일 하나면 생성되고 실행시켰을 때 무사히 실행될 것이다.
이전에 이미 -plain.jar가 생성되었다면 삭제해주는 것이 좋다.
'에러모음' 카테고리의 다른 글
JPA 일대다 조인 데이터 부풀려지기 방지하기 (0) | 2022.06.27 |
---|---|
JPA필수코스 N+1문제 해결하기 (0) | 2022.06.25 |
[Error] Mockito를 사용한 단위테스트(form데이터 전송) (0) | 2022.05.17 |
[Error] JPQL에서 엔티티조인 후 내부의 엔티티 조회 (0) | 2022.05.03 |
[Error] TransientPropertyValueException에러.. (0) | 2022.05.02 |
댓글
이 글 공유하기
다른 글
-
JPA 일대다 조인 데이터 부풀려지기 방지하기
JPA 일대다 조인 데이터 부풀려지기 방지하기
2022.06.27 -
JPA필수코스 N+1문제 해결하기
JPA필수코스 N+1문제 해결하기
2022.06.25 -
[Error] Mockito를 사용한 단위테스트(form데이터 전송)
[Error] Mockito를 사용한 단위테스트(form데이터 전송)
2022.05.17 -
[Error] JPQL에서 엔티티조인 후 내부의 엔티티 조회
[Error] JPQL에서 엔티티조인 후 내부의 엔티티 조회
2022.05.03