Nếu tôi hiểu đúng, bạn đang nhầm lẫn giữa Project.dependencies
khối tập lệnh với Project.buildscript.dependencies
khối tập lệnh (giống như tôi đã làm khi tôi đến câu hỏi này).
Tôi sẽ cố gắng trả lời điều này với những gì tôi tìm thấy.
Tôi nghĩ bạn đã quen với Project.dependencies
khối script. Trong khối này, chúng tôi khai báo các phần phụ thuộc được yêu cầu bởi mã nguồn của chúng tôi. Có một số cách để khai báo phụ thuộc mà chúng ta cần cho dự án. Xem Hướng dẫn Gradle: Các kiểu phụ thuộc . Tôi sẽ chỉ đề cập đến phần có liên quan nhất đến vấn đề này:
compile 'org.hibernate:hibernate-core:5.0.5.Final'
là một khai báo phụ thuộc mô-đun. Cấu hình biên dịch (hiện không được dùng bởi cấu hình triển khai.) Chỉ là một từ khóa cho Implementation only dependencies.
Nó không phải là một từ khóa mô tả nó thuộc loại phụ thuộc nào (theo loại ở đây, tôi đang làm theo ba loại được định nghĩa trong hướng dẫn, tức là mô-đun tệp và dự án.)
Trong Hướng dẫn Gradle: Tổ chức Xây dựng Logic, nó nói:
Nếu tập lệnh xây dựng của bạn cần sử dụng các thư viện bên ngoài, bạn có thể thêm chúng vào classpath của tập lệnh trong chính tập lệnh xây dựng. Bạn thực hiện việc này bằng cách sử dụng phương thức buildcript (), truyền vào một bao đóng khai báo classpath tập lệnh xây dựng.
Đây cũng giống như cách bạn khai báo, ví dụ, classpath biên dịch Java. Bạn có thể sử dụng bất kỳ kiểu phụ thuộc nào được mô tả trong Kiểu phụ thuộc, ngoại trừ kiểu phụ thuộc của dự án.
Sau khi khai báo classpath của tập lệnh xây dựng, bạn có thể sử dụng các lớp trong tập lệnh xây dựng của mình như cách bạn sử dụng bất kỳ lớp nào khác trên classpath.
Tôi hy vọng mọi thứ đang trở nên rõ ràng với bạn bây giờ.
Với classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
chúng tôi đang thiết lập classpath
phương thức com.android.tools.build:gradle:${Versions.android_gradle_plugin}
là một phần phụ thuộc mô-đun được sử dụng bởi chính tập lệnh xây dựng chứ không phải nguồn trong dự án của bạn.
Mặt khác, với việc compile 'org.hibernate:hibernate-core:5.0.5.Final'
chúng tôi đang khai báo sự phụ thuộc mô-đun cần thiết cho dự án của bạn với cấu hình biên dịch .
tl; dr: The classpath
, compile
và implementation
là tất cả các từ khóa có thể được sử dụng để chống lại sự phụ thuộc trong các trường hợp khác nhau. Cái trước được sử dụng khi bạn muốn chuyển một phần phụ thuộc vào tập lệnh xây dựng và cái sau là một trong những cấu hình bạn có thể muốn khai báo.
classpath
không phải là một phạm vi phụ thuộc hợp lệ.