본문 바로가기
JAVA/Spring

[Gradle] Could not find method compile() for arguments에러 해결방법(+compile, implementation 차이점)

by lumayi 2021. 10. 27.

 

라이브러리도 다시 재다운로드를 받고, 다 확인해봐도 잘못된 것이 없어보이는데 계속 arguments를 찾을 수 없다는 에러가 떴다. 원인은 gradle7 버전에 compile을 사용하는 경우 나타나는 오류라고 한다.

간단한 해결 방법이 있다.

 

변경 전(compile group)
변경 후 (implementation group)

 

이렇게 compile대신 implementation을 써주면 된다. Gradle3.0 이상부터는 compile을 더 이상 지원하지(deprecated) 않는다고 한다. 그래서 구글링한 소스 코드를 참고하더라도 compile, testComplie 대신 implementataion, testImplementation을 써주어야한다.(debug,andorid도 마찬가지)

 

 

여기서 궁금증, 그렇다면 compile과 implementation의 차이점은 무엇일까?

왜 달라지게 되는 건지 알아보자.

 

https://bluayer.com/13

1.Compile(API)

컴파일의 경우 A의 파일에 변경이 있다면 의존상태에 있는 B, C를 모두 리빌드해주는 것이고

 

2.Implementation

implemetation은 A파일에 변경이 있다면 직접적인 의존관계에 있는 B만을 리빌드해주는 것이라고 한다.

 

-> 결론: implementation을 쓰는게 의존성도 떨어지고 리빌드를 많이 하지않아도 되니 속도가 빨라진다! 또한 compile은 위의 API를 리빌드하는 과정에서 사용자에게 다 API를 노출시키는데 implementation은 필요한 API만이 노출되기에 프로그램 투명성이 좀 더 보장된다고 볼 수 있다.

 

참고사이트:

https://bluayer.com/13

https://stackoverflow.com/questions/44493378/whats-the-difference-between-implementation-api-and-compile-in-gradle

https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html#sec:configurations_java_tutorial

반응형