2013-07-11 30 views
7

Tôi đang viết một plugin Gradle và tôi đang học Gradle bằng cách đọc hướng dẫn sử dụng và mã nguồn của các plugin bên trong dự án Gradle.Plugin Gradle: Convention vs. Extension

Trong mã nguồn, tôi thấy 2 cách thêm thuộc tính cho dự án:

  • ước (theo quy định của JavaBasePlugin và được sử dụng bởi JavaPlugin)
  • mở rộng (theo quy định của AnnoncePlugin và được sử dụng bởi BuildAnnouncementsPlugin).

Tôi không hiểu sự khác biệt giữa chúng và cái nào nên sử dụng cho tình huống nào. Ai đó có thể giải thích?

PS: Ai đó có thể thêm thẻ "plugin gradle" vào SO vui lòng không?

Trả lời

7

Tôi tìm thấy câu trả lời trên forum of Gradle:

Extensions và ước nhiều cách tương tự (nhưng không giống hệt nhau) để tự động mở rộng mô hình xây dựng. Tiện ích mở rộng là khái niệm mới hơn và đã thay thế phần lớn các quy ước. Tóm lại, chỉ sử dụng các phần mở rộng, không sử dụng các quy ước.

[...]

Một phần mở rộng là một thể hiện của một lớp tùy ý (thường là người dùng định nghĩa) đó là gắn liền với việc xây dựng mô hình dưới một tên người dùng định nghĩa. Lớp mở rộng có thể định nghĩa các phương thức tùy ý. Giả sử nó được gắn vào một đối tượng Project, một phần mở rộng cho phép bạn thêm project.foo.someMethod, nhưng không phải project.someMethod. Vì mỗi phần mở rộng có không gian tên riêng của nó (foo trong trường hợp này), khả năng va chạm tên được giảm đáng kể (so với các quy ước).