2012-08-22 11 views
65

Czy w przypadku wielostronnego projektu stopniowania ktoś może mi powiedzieć, jaka jest dokładnie różnica między sekcją "wszystkie projekty" a "podprojektami"? Tylko katalog nadrzędny? Czy ktoś korzysta z obu? Jeśli tak, czy masz ogólne zasady, które określają, co zazwyczaj jest w każdym z nich?Jaka jest różnica między wszystkimi projektami i podprojektami?

Powiązane pytanie: jaka jest różnica między tymi dwoma składni (naprawdę dla allprojects I podprojektów):

subprojects { ... 
} 

i

configure(subprojects) { ... 
} 

Kiedy byś jeden nad drugim?

Odpowiedz

64

W kompilacji z wieloma projektami masz projekt główny i podprojekty. Połączenie obu to wszystkie projekty. Podstawowy projekt to miejsce, z którego rozpoczyna się kompilacja. Typowy wzór to rootProject nie ma kodu, a podprojekty to projekty java. W takim przypadku zastosować wtyczki java tylko do podprojektów:

subprojects { 
    apply plugin: 'java' 
} 

Byłoby to równoznaczne z maven łącznej projektu pom który właśnie buduje podmodułów.

Jeśli chodzi o dwie składnie, robią dokładnie to samo. Ten pierwszy wygląda lepiej.

+0

Próbuję zrozumieć twoją odpowiedź i dlaczego ktoś chciałby, aby "rootProject nie miał kodu"? –

+1

Może zawierać kod, ale * przez większość czasu * służy tylko do łączenia wszystkich podprojektów w ramach jednego projektu głównego. – mallaudin

+1

Ten facet buduje. –

33

Dodając do odpowiedzi Ryana, metoda configure staje się ważna, gdy chcesz skonfigurować niestandardowe podzbiory obiektów. Na przykład configure([project(":foo"), project(":bar")]) { ... } lub configure(tasks.matching { it.name.contains("foo") }) { ... }.

Kiedy używać allprojects kontra subprojects zależy od okoliczności. Często używasz obu. Na przykład wtyczki związane z kodem, takie jak wtyczka Java, są zazwyczaj stosowane do subprojects, ponieważ w wielu kompilacjach projekt główny nie zawiera żadnego kodu. Z drugiej strony, wtyczki Eclipse i IDEA są zwykle stosowane do allprojects. Jeśli masz wątpliwości, przejrzyj przykłady i inne kompilacje i/lub eksperymenty. Ogólnym celem jest uniknięcie nieistotnej konfiguracji. W tym sensie subprojects jest lepszy niż allprojects, o ile daje oczekiwane wyniki.

Powiązane problemy