Pracuję nad wdrożeniem systemu kompilacji Gradle dla oprogramowania, które ma części opracowane w obszarze bez połączenia z Internetem lub możliwość zainstalowania serwera Maven/Ivy (takiego jak Nexus). Aby wspierać rozwój w tych środowiskach, przygotowuję wtyczkę Gradle, która umożliwia generowanie "Offline Workspace".Tworzenie repozytorium Gradle dla rozwoju offline
Pierwotnie zaimplementowałem tę funkcjonalność, wyzwalając rozdzielczość każdej konfiguracji w projekcie (uruchamiając pobieranie wszystkich zależności), a następnie przechodząc przez całe drzewo zależności każdej konfiguracji i kopiując lokalną kopię zależności do obszaru roboczego offline . (Zadanie kopiowania zostało wygenerowane dla każdej operacji kopiowania.) Do tych JARów odwoływałoby się użycie repozytorium flatDir.
Ta implementacja wykonywała swoje zadanie przy użyciu bloku AfterEvaluate. Mimo że działało to dobrze w Gradle 2.0, uruchamia ostrzeżenie o przestarzałości w Gradle 2.2.1, ponieważ wyzwalanie rozdzielczości jest jakoś widziane jako modyfikowanie konfiguracji po jej rozwiązaniu (Attempting to change configuration ':core:runtime' after it has been included in dependency resolution. This behaviour has been deprecated and is scheduled to be removed in Gradle 3.0
). Podsumowując, podejście to wydaje się dość hackowate, ponieważ wymaga również zmodyfikowania plików build.gradle, aby jawnie wylistować wszystkie zależności przechodnie, ponieważ nie istnieją żadne pliki POM, które mogłyby poprawnie określić zależności.
Bardziej eleganckie podejście wydaje się budować lokalne repozytorium Maven dla wszystkich zależności (w tym pliki POM, źródłowe pliki JAR, pliki JAR javadoc itp.), A następnie wystarczy użyć typu repozytorium mavenLocal(). Niestety, nie jestem pewien, jak to zrobić właściwie, gdy nie potrzebuję wyzwalać rozdzielczości artefaktów, aby wykonać tę operację.
Czy jest jakiś lepszy sposób, w jaki mogę uzyskać pełne pobieranie artefaktów w łatwy do spakowania sposób, niż po prostu skompresowanie całego katalogu $ USER_HOME/.gradle?
Angielski README będzie ok. – Cesar
Ta wtyczka ivypot jest fajna. Ale to nie rozwiązuje mojego problemu. Potrzebuję buforować tylko ograniczony zestaw zależności, które pochodzą z prywatnego repozytorium. Nie muszę przechowywać w pamięci podręcznej wszystkiego. Muszę więc przeszukać inną podobną wtyczkę lub zaimplementować funkcję w tym kodzie wtyczki. – kinORnirvana