Home
Java
Gradle에서 Compile - Implementation 특징과 차이
devfoxstar
devfoxstar
October 29, 2021
1 min

Table Of Contents

01
Compile
02
Implementation
03
Implementation을 사용하는 이유
04
자바 라이브러리 플러그인 설정 구조
05
자바 라이브러리 플러그인 테스트 설정 구조

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 모듈 구조를 가진 프로젝트가 있다고 가정해 보겠습니다.

Compile


A 모듈을 수정하면 직접 혹은 간접으로 연결된 B와 C 모두 빌드합니다. 그리고 C에서 A에 접근할 수 있습니다.

Implementation


A 모듈을 수정하면 직접 연결된 B만 다시 빌드합니다. 그리고 C에서 A에 접근할 수 없습니다.

Implementation을 사용하는 이유


compile은 Gradle 3.0부터 deprecated 되었고, api로 대체됐습니다. 그리고 Gradle 7.0 부터는 compile 지원이 종료됐습니다.

그럼 implementation을 사용하는 이유가 뭘까요?

  • 직접 연결된 모듈만 컴파일하기 때문에 빠릅니다.
  • 불필요한 API 노출을 막아줍니다.

참고로 의존성 설정 구조입니다. 자세한 사항은 아래 공식문서와 블로그를 참고해 주세요.

자바 라이브러리 플러그인 설정 구조


자바 라이브러리 플러그인 설정 구조
자바 라이브러리 플러그인 설정 구조

자바 라이브러리 플러그인 테스트 설정 구조


자바 라이브러리 플러그인 테스트 설정 구조
자바 라이브러리 플러그인 테스트 설정 구조

공식 문서 - The Java Library Plugin

블로그 - Implementation VS Compile


Tags

#Java#Gradle#Compile#Implementation

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media