2011-01-14 52 views
12

Tôi phụ thuộc vào một vài tạo tác mà tôi cần để biên dịch và chạy ứng dụng của mình.Tại sao tôi phải chỉ định cả 'thời gian chạy' và 'biên dịch' cho cùng một phụ thuộc?

Theo các tài liệu Gradle, cấu hình thời gian chạy kéo dài cấu hình biên dịch, vì vậy chắc chắn thêm một sự phụ thuộc sử dụng runtime ngụ ý một ngầm compile phụ thuộc?

Ít nhất đó là giả định của tôi, nhưng nó không hoạt động. Khi chỉ phụ thuộc vào tạo tác sử dụng runtime, dự án của tôi không biên dịch nữa. Tôi nghĩa là phải:

compile 'oauth.signpost:signpost-core:1.2.1.2' 
runtime 'oauth.signpost:signpost-core:1.2.1.2' 

để áp dụng cho cả hai biên dịch thấy các lớp Signpost khi chạy.

Tôi có thiếu gì đó không? Điều đó có vẻ không đúng ...

Trả lời

20

Hầu như đúng. Cấu hình thời gian chạy, thực sự, mở rộng cấu hình biên dịch (docs). Có nghĩa là, bất kỳ phụ thuộc nào được thêm vào cấu hình biên dịch đều có sẵn trong cấu hình thời gian chạy (docs).

compile 'oauth.signpost:signpost-core:1.2.1.2' sẽ đủ để có được tạo phẩm này trong cả thời gian chạy và biên dịch.

+2

Tôi thấy - kỳ quặc. Chỉ cần cố gắng để hiểu cách làm việc này sau đó. Nhìn vào http://www.gradle.org/0.9.1/docs/userguide/userguide_single.html#sec:java_plugin_and_dependency_management, điều đó có nghĩa là bất kỳ cấu hình nào trong hình 20.2 là sự kết hợp của tất cả các cấu hình có mũi tên đi vào nó ? Suy nghĩ về 'mở rộng' theo kiểu 'thừa kế' cổ điển, người ta sẽ cho rằng ngược lại. – Matthias

+0

Oh và: có đúng là giả định rằng cấu hình 'thời gian chạy' của Gradle tương ứng với phạm vi 'được cung cấp' của Maven không? – Matthias

+1

Trong biểu đồ hướng dẫn sử dụng 20.2, bất kỳ cấu hình nào cũng là sự kết hợp của tất cả các đường dẫn * đi *, ví dụ: 'testRuntime' bao gồm mọi thứ từ' runtime' và 'compile', beacuse mũi tên đi cho thấy' testRuntime' mở rộng 'runtime' –

Các vấn đề liên quan