내가 올바르게 이해한다면 Project.dependencies
스크립트 블록과 스크립트 블록을 혼동하는 것입니다 Project.buildscript.dependencies
(이 질문에 도달했을 때와 마찬가지로).
나는 내가 찾은 것으로 대답하려고 노력할 것이다.
이미 Project.dependencies
스크립트 블록에 익숙해야한다고 생각합니다 . 이 블록에서는 소스 코드에 필요한 종속성을 선언합니다. 프로젝트에 필요한 종속성을 선언하는 방법에는 여러 가지가 있습니다. Gradle 자습서 : 종속성 유형을 참조하십시오 . 이 문제와 가장 관련이있는 부분 만 언급하겠습니다.
compile 'org.hibernate:hibernate-core:5.0.5.Final'
모듈 종속성 선언입니다. 컴파일 구성 (이제는 구현 구성에서 더 이상 사용되지 않습니다.)은 단지 Implementation only dependencies.
어떤 유형의 종속성인지를 설명하는 키워드가 아닙니다 (여기서 유형별로 저는 자습서에 정의 된 세 가지 유형, 즉 모듈, 파일 및 프로젝트.)
에서 Gradle을 자습서 : 빌드 로직을 구성하기 는 말합니다 :
빌드 스크립트에서 외부 라이브러리를 사용해야하는 경우 빌드 스크립트 자체의 스크립트 클래스 경로에 추가 할 수 있습니다. buildscript () 메서드를 사용하여 빌드 스크립트 클래스 경로를 선언하는 클로저를 전달합니다.
이는 예를 들어 Java 컴파일 클래스 경로를 선언하는 것과 동일한 방법입니다. 프로젝트 종속성을 제외하고 종속성 유형에 설명 된 모든 종속성 유형을 사용할 수 있습니다.
빌드 스크립트 클래스 경로를 선언했으면 클래스 경로의 다른 클래스와 마찬가지로 빌드 스크립트의 클래스를 사용할 수 있습니다.
이제 상황이 명확 해지기를 바랍니다.
으로 classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
우리가 설정하는 classpath
방법을 함께 com.android.tools.build:gradle:${Versions.android_gradle_plugin}
하는 빌드 스크립트 자체보다는 프로젝트의 소스에서 사용되는 모듈 종속성입니다.
반면에 compile 'org.hibernate:hibernate-core:5.0.5.Final'
compile configuration 을 사용하여 프로젝트에 필요한 모듈 종속성을 선언 합니다 .
TL; DR 다음 classpath
, compile
그리고 implementation
서로 다른 상황에서 종속에 대해 사용할 수있는 모든 키워드입니다. 전자는 빌드 스크립트에 종속성을 전달하려는 경우 사용되며 후자는 선언하려는 구성 중 하나입니다 .
classpath
유효한 종속성 범위가 아닙니다.