2013-07-11 12 views
7

Piszę wtyczkę Gradle i uczę się gry Gradle, czytając podręcznik użytkownika i kod źródłowy wtyczek w projekcie Gradle.Wtyczka Gradle: Konwencja kontra rozszerzenie

W kodzie źródłowym, znalazłem 2 sposoby dodawania właściwości do projektu:

  • konwencji (ustawiony przez JavaBasePlugin i wykorzystywane przez JavaPlugin)
  • Extension (ustawione przez AnnoncePlugin i używane przez BuildAnnouncementsPlugin).

Nie rozumiem różnicy między nimi i tego, który z nich należy użyć w danej sytuacji. Czy ktoś mógłby wyjaśnić?

PS: Czy ktoś mógłby dodać tag "gradle-plugin" w SO proszę?

Odpowiedz

7

znalazłem odpowiedź na forum of Gradle:

Rozszerzenia i konwencje są podobne (ale nie identyczne) sposoby dynamicznie rozszerzają model kompilacji. Rozszerzenia są nowszą koncepcją i w dużej mierze zastąpiły konwencje. Krótko mówiąc, używaj tylko rozszerzeń, nie używaj konwencji.

[...]

Rozszerzenie jest instancją dowolnej klasy (zwykle definiowane przez użytkownika), który jest dołączony do modelu kompilacji pod nazwą zdefiniowanego przez użytkownika. Klasa rozszerzenia może definiować dowolne metody. Zakładając, że jest on dołączony do obiektu projektu, rozszerzenie pozwala na dodanie projektu.foo.someMethod, ale nie project.someMethod. Ponieważ każde rozszerzenie ma swoją własną przestrzeń nazw (w tym przypadku foo), prawdopodobieństwo kolizji nazw jest znacznie mniejsze (w porównaniu do konwencji).

Powiązane problemy