이 글은 intellij gradle 빌드 오류로 고생하고 있는 개발자들을 위한 글 입니다.
gradle 빌드 오류 해결법만 확인하고 싶은 분들은 목차 부분의 [gradle 빌드 해결] 로 바로 넘어가시면 됩니다.
문제발생
기존에 잘 실행되던 프로젝트를 새로 클론(clone) 받아 Intellij에서 열자마자 다음과 같은 에러가 발생했다.
gradle build failed
프로젝트에는 별다른 수정이 없었고, 환경도 기존과 동일했기에 더 당황스러웠다.
늘 잘되던 프로젝트 였고, 아무 문제가 없었는데 갑자기 build가 안되니...
그래서 구글을 뒤져 다양한 방법을 실행에 나갔다. (이 방법을 통해 해결이 될 수도 있어서 해결 방법을 하나하나, 나열했습니다.)
gradle 오류 해결 과정
1. setting > build > build tools > gradle > gradle JVM 에서 JDK 버전 변경
인텔리J 오른쪽 상단에 맨 끝에 ... 3개 클릭
setting 에 들어가서 build > build tools > gradle JVM 에서 자신이 환경변수에 설정한 JDK 버전을 변경해주면 된다고 해서 똑같이 따라 해봤지만 build 는 되지 않았다.
2. Ctrl + shift + Alt + s 클릭 project SDK 변경
혹시 project 설정에 문제가 있나 해서 SDK의 버전을 변경해 보았다. 하지만 역시나 build 오류는 해결 되지 않았다.
3. reload all gradle project
인텔리제이 우측을 보면 코끼리 모양이 있는 것을 확인 할 수 있다.
여기서 사진 맨 왼쪽에 있는 + 모양 왼쪽에 있는 버튼을 눌러 gradle을 reload 해주자.
(이렇게 되면 기존에 설치가 안되어 있었던 파일들이 다시 설치가 되면서 실행이 되는 경우가 있다. 옛날에는 위의 방법으로 build 가 안되던 오류를 해결했던 적이 있었다.)
하지만 역시 build faild 라고 뜨면서 reload도 안되는 상황이었다.
4. Terminal 창에서 gradlew build 실행
gradlew build
Terminal 창에서 gradlew build 라는 명령어를 입력해 보았다.
(되면 좋고 안되면 오류문이 나오니까 오류문 분석을 하기 위함 이었다.)
아니나 다를까? 이런 오류문이 발생했다. (┬┬﹏┬┬)
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain Caused by: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain
분석해보니, gradle wrapper 실행에 필요한 클래스 파일 자체가 없거나 손상이 되었다는 의미였다.
프로젝트의 gradle 파일을 여니
사진과 같이 gradle-wrapper.jar 파일이 있어야 하는데 gradle-wrapper.properties 파일만 있는 것을 확인 할 수 있었다.
결론은 gradle-wrapper.jar 파일이 없어서 발생했던 오류들이다.
오류가 발생한 원인
..그럼 왜 이런 오류가 발생을 한 걸까?
결론 부터 말하자면 clone 하면서 gitignore 라는 파일에서
jar 파일을 무시하도록 설정을 하면서 기존에 있어야 할 jar 파일이 사라져 오류가 났던 문제인 것 같다.
gradle 빌드 해결
gradle 빌드 해결하는 방법은 생각보다 간단했다...
(그냥 gradle 을 설치해주고 gradle build 만 해주면 끝나는 일을.. 생각보다 너무 돌아갔던 것 같다.)
Gradle | Releases
Find binaries and reference documentation for current and past versions of Gradle.
gradle.org
gradle 설치 하는 사이트에서 자신이 선호하는 버전에 맞춰서 설치를 해준뒤 환경변수에 gradle을 등록해주면 된다.
cmd 나 Terminal 에서 gradle -v 확인해보면
버전이 정상적으로 나오는 것을 확인 할 수 있다.
intellj에서 gradle build 가 정상적으로 작동이 되는 것 또한 확인 할 수 있다.