Spring Boot에서 Gradle에 의존성을 추가하는데 오류가 발생했습니다. 참고로 Thymeleaf에서 날짜 형식을 추가하는 라이브러리입니다.
dependencies { compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time' }
compile() 메서드가 없다는 오류입니다.
Could not find method compile() for arguments
오류의 원인은 Gradle 버전 문제로, compile() 메서드는 Gradle 6 이하 버전에서만 제공됩니다. 프로젝트의 Gradle 버전을 확인하고 implementation() 메서드로 대체합니다.
./gradlew --version
dependencies { implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time' }
그럼 Compile과 Implementation의 특징과 차이를 알아보겠습니다.
A ← B ← C
모듈 구조를 가진 프로젝트가 있다고 가정해 보겠습니다.
A 모듈을 수정하면 직접 혹은 간접으로 연결된 B와 C 모두 빌드합니다. 그리고 C에서 A에 접근할 수 있습니다.
A 모듈을 수정하면 직접 연결된 B만 다시 빌드합니다. 그리고 C에서 A에 접근할 수 없습니다.
compile은 Gradle 3.0부터 deprecated 되었고, api로 대체됐습니다. 그리고 Gradle 7.0 부터는 compile 지원이 종료됐습니다.
그럼 implementation을 사용하는 이유가 뭘까요?
참고로 의존성 설정 구조입니다. 자세한 사항은 아래 공식문서와 블로그를 참고해 주세요.