Czytam dokumentację Maven i natknąłem się na nazwę „uber-jar”.
Co oznacza Uber-Jar i jakie są jego cechy / zalety?
Czytam dokumentację Maven i natknąłem się na nazwę „uber-jar”.
Co oznacza Uber-Jar i jakie są jego cechy / zalety?
Odpowiedzi:
Über
to niemieckie słowo oznaczające above
lub over
(w rzeczywistości jest podobne do angielskiego over
).
Dlatego w tym kontekście słoik-uber jest „słoikiem”, o jeden poziom wyżej od prostego pliku JAR (a) , zdefiniowanego jako taki, który zawiera zarówno pakiet, jak i wszystkie jego zależności w jednym pliku JAR. Nazwa może pochodzić od tej samej stajni co ultrageek, superman, hiperprzestrzeń i metadane, które wszystkie mają podobne znaczenie „poza normą”.
Zaletą jest to, że możesz dystrybuować swój słoik uber-jar i zupełnie nie dbać o to, czy zależności są instalowane w miejscu docelowym, ponieważ uber-jar faktycznie nie ma żadnych zależności.
Wszystkie zależności twoich własnych rzeczy w słoiku uber są również w tym słoju. Podobnie jak wszystkie zależności tych zależności. I tak dalej.
(a) Prawdopodobnie nie powinienem wyjaśniać programistom Java, czym jest plik JAR, ale podam go w celu uzupełnienia. Jest to archiwum Java, w zasadzie pojedynczy plik, który zazwyczaj zawiera wiele plików klasy Java wraz z powiązanymi metadanymi i zasobami.
über
i over
są wynikiem systematycznego przesunięcia wokalnego w starych germańskich, które mogą być również obserwowane w tych par słów: geben/give
, leben/live
, haben/have
, heben/heave
i wiele innych.
słoik Ubar jest również znany jako słoik tłuszczu, tj. słoik z zależnościami.
Istnieją trzy popularne metody konstruowania słoika Uber:
Definicja Paxdiablo jest naprawdę dobra.
Ponadto rozważ dostarczenie słoika do uber-jar jest czasem dość interesujące, jeśli naprawdę chcesz rozpowszechniać oprogramowanie i nie chcesz, aby klient musiał sam pobierać zależności. Wadą tego jest fakt, że jeśli ich własne zasady nie zezwalają na korzystanie z niektórych bibliotek lub jeśli muszą powiązać niektóre dodatkowe komponenty (slf4j, biblioteki lib zgodne z systemem, biblioteki arch specialiez, ...) prawdopodobnie zwiększy to ich trudności .
Możesz to zrobić:
Czystszym rozwiązaniem jest oddzielne udostępnienie swojej biblioteki; maven-shadow-plugin ma wstępnie skonfigurowany deskryptor. Nie jest to bardziej skomplikowane (z maven i jego wtyczką).
Wreszcie, naprawdę dobrym rozwiązaniem jest użycie pakietu OSGI. Jest na to mnóstwo dobrych samouczków :)
W celu dalszej konfiguracji zapoznaj się z tymi tematami:
Chudy - zawiera TYLKO bity, które dosłownie wpisujesz w edytorze kodu, i NIC NIE.
Cienki - zawiera wszystkie powyższe PLUS bezpośrednie zależności aplikacji od aplikacji (sterowniki db, biblioteki narzędzi itp.).
Hollow - odwrotność cienkich - zawiera tylko bity potrzebne do uruchomienia aplikacji, ale NIE zawiera samej aplikacji. Zasadniczo wstępnie zapakowany „serwer aplikacji”, na którym można później wdrożyć aplikację, w tym samym stylu co tradycyjne serwery aplikacji Java EE, ale z istotnymi różnicami.
Tłuszcz / Uber - zawiera fragment, który dosłownie sam piszesz PLUS bezpośrednie zależności aplikacji PLUS bity potrzebne do uruchomienia aplikacji „na własną rękę”.
Źródło: artykuł Dzone
Przesłane z: https://stackoverflow.com/a/57592130/9470346