W Gradle, jak zadeklarować wspólne zależności w jednym miejscu?
109
W Maven jest bardzo przydatna funkcja, gdy można zdefiniować zależność w <dependencyManagement>sekcji nadrzędnego POM i odwołać się do tej zależności z modułów potomnych bez określania wersji, zakresu lub czegokolwiek.
Aby udostępnić deklaracje zależności z zaawansowanymi opcjami konfiguracji, możesz użyć DependencyHandler.create:
libraries =[
spring_core: dependencies.create("org.springframework:spring-core:3.1"){
exclude module:"commons-logging"
force =true}]
Wiele zależności można udostępniać pod tą samą nazwą:
libraries =[
spring:[// Groovy list literal"org.springframework:spring-core:3.1","org.springframework:spring-jdbc:3.1"]]
dependencies { compile libraries.spring } doda wtedy obie zależności jednocześnie.
Jedyną informacją, której nie możesz udostępniać w ten sposób, jest to, do jakiej konfiguracji ( zakresu w terminologii Maven) należy przypisać zależność. Jednak z mojego doświadczenia wynika, że i tak lepiej jest o tym powiedzieć.
Dzięki, to rozwiązuje moje pytanie, ale nadal mam obawy. W Maven możemy pozostawić wersję pustą, a jeśli jest to biblioteka, jest to wygodne, ponieważ można jej użyć w naszej aplikacji i wprowadzić dependencyManagement, aby zdefiniować wersję biblioteki to powinno zająć. Jak byś zrobił to samo z Gradle?
Peter, ctapobep mówi, że w maven możesz zadeklarować zależności z wersją (i zakresem) w pom rodzica (lub agregatora) w sekcji dependencyManagement. Następnie w pompie „konkretnym” nie musisz ponownie deklarować wersji; po prostu artefact i groupId. Zasadniczo mówi mavenowi „Potrzebuję X: Y, ale użyj dowolnej wersji skonfigurowanej przez rodzica”.
Aby uniknąć tego rodzaju duplikacji, staram się tworzyć osobny dependencies.gradleskrypt, w którym wszystkie moje zależności definiuję jako właściwości, np ext.GROOVY = 'org.codehaus.groovy:groovy-all:2.1.6'. : . W ramach projektu głównego build.gradle, to ja allprojects { apply from: "$rootDir/dependencies.gradle" }. Wtedy wszystkie zależności są definiowane w jednym pliku, zamiast je rozpraszać, a więcej „łatwych do odczytania” stałych jest używanych w konfiguracjach zależności.
Dokładnie to zrobiłem powyżej. Nie musisz składać wniosku, allprojectsponieważ dodatkowe właściwości na poziomie projektu są widoczne dla podprojektów.
To późna odpowiedź, ale możesz również zajrzeć na: http://plugins.gradle.org/plugin/io.spring.dependency-management
Zapewnia możliwość zaimportowania „bom” producenta i ponownego wykorzystania definicji zdefiniowane w „bom”. Z pewnością jest to dobra pomoc przy stopniowej migracji z maven do gradle! Cieszę się tym teraz.
Chociaż jest wygodna, ta wtyczka może mieć znaczący wpływ na wydajność. W przypadku 30 podprojektów z ponad 200 zależnościami dodaje to 1 minutę do fazy rozwiązywania zależności. W przypadku małych projektów działa to jednak jak urok
zastępuje również przechodnie wersje zależności, powiedzmy, że zadeklarowałeś wersję 3.0.0 w zarządzaniu zależnościami, ale dla jednego z podprojektów musisz użyć starszej wersji, np. 2.5.0, wtedy jeśli masz projekt zależny od tego starszego projektu, zależność przechodnia zostanie nadpisana z 2.5.0 na to, co zadeklarowano we wtyczce zarządzania zależnościami, więc 3.0.0 w tym przypadku bardzo dziwne zachowanie
Zalecaną praktyką w przypadku większych projektów jest deklarowanie zależności bez wersji i używanie ograniczeń zależności do deklarowania wersji. Zaletą jest to, że ograniczenia zależności umożliwiają zarządzanie wersjami wszystkich zależności, w tym przechodnimi, w jednym miejscu.
Opakowywanie bloku zależności za pomocą sprawdzenia wtyczki Java (... whenPluginAdded {) nie jest bezwzględnie konieczne, ale będzie wtedy obsługiwać dodawanie projektu innego niż Java do tej samej kompilacji.
Następnie w projekcie oceny podrzędnej możesz po prostu pominąć wersję:
Myślę, że Gradle zapewnia, że w takim przypadku używana jest wtyczka platformy Java . Jednak dokumentacja Gradle nie jest w tym momencie zbyt jasna. Myślę, że użycie allprojectsjest również w porządku.
chcę zadeklarować ograniczenia w projekcie głównym, ale tylko w jednym z moich podprojektów, chcę załadować wszystkie te zależności, które mają zdefiniowane ograniczenia.
io.spring.gradle:dependency-management-pluginwtyczka ma problemy z nową serią Gradle 3.x, ale stabilna dla serii 2.x. W celach informacyjnych zajrzyj do raportu o błędzie Porzuć wsparcie dla Gradle 3 # 115
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.