Skip to content

馃摃 馃摋 馃摌 馃摍 Rewelacyjne biblioteki w Javie, kt贸rych prawdopodobnie nie u偶ywasz, a powiniene艣.

Parafraz膮 powy偶szego tytu艂u rozpoczyna si臋 pewien w膮tek na Reddit, na kt贸ry trafi艂em jaki艣 czas temu. Autor otwiera w nim dyskusj臋 na temat mniej popularnych, aczkolwiek warto艣ciowych bibliotek.

Pomy艣la艂em, 偶e jest to 艣wietny materia艂 na artyku艂. Tak o to powsta艂 wpis, kt贸ry zbiera niemal 300 odpowiedzi w bardziej ustrukturyzowan膮 form臋 i w minimalnej formie przybli偶a te pozycje. Wszystkie wymienione biblioteki skategoryzowa艂em, okrasi艂em kr贸tkim opisem, doda艂em odno艣niki. Pe艂n膮 list臋 wszystkich bibliotek znajdziesz w spisie tre艣ci poni偶ej. My艣l臋, 偶e nawet maj膮c kilka lat do艣wiadczenia, nadal kilka pozycji Ci臋 zaciekawi. Zapraszam do lektury.

Spis tre艣ci

Bazy danych

HikariCP – pula po艂膮cze艅 do bazy danych

https://github.com/brettwooldridge/HikariCP

HikariCP czyli bardzo lekka (130Kb) i wydajna pula po艂膮cze艅 do bazy danych. W t艂umaczeniu z Japo艅skiego promie艅 艣wietlny. Nazwa jednoznacznie nawi膮zuje do szybko艣ci dzia艂ania tej biblioteki i jak pokazuj膮 mikro benchmarki, bynajmniej nie s膮 to s艂owa rzucone na wiatr.

Reddison – abstrakcja na Redisa

Redisson: Redis Java client with features of In-Memory Data Grid

https://github.com/redisson/redisson

Kolejny link zwi膮zany z tematyk膮 baz, jaki pojawi艂 si臋 w w膮tku to Redisson. Jest to biblioteka opakowuj膮ca API jednej z najpopularniejszych baz typu klucz warto艣膰. Posiada spore mo偶liwo艣ci przez nadbudowane abstrakcje, jednak jak s艂usznie zauwa偶a, jeden z u偶ytkownik贸w czasem niesie to ryzyko przykrycia istotnych szczeg贸艂贸w oryginalnego API, jakie oferuje czysty Redis.

JDBI – czyli ciut wi臋cej ni偶 JDBC

https://jdbi.org/

Je偶eli szukasz biblioteki, kt贸ra zapewni dost臋p do bazy danych, ale zale偶y Ci na pozostaniu blisko 艣wiata SQL? JDBI mo偶e okaza膰 si臋 ciekawym wyborem. Oferuje nieco wi臋ksze mo偶liwo艣ci ni偶 sam JDBC jak, chocia偶by zgrabne parametryzowanie zapyta艅, czy opakowanie wynik贸w do obiekt贸w przy pomocy udost臋pnionych mapper贸w. Nie dok艂ada jednak 偶adnych zb臋dnych abstrakcji i nie stara si臋 by膰 kolejnym rozwi膮zaniem klasy ORM.

Spring Data JDBC – odchudzony Spring Data bez magii JPA

https://spring.io/projects/spring-data-jdbc

G艂贸wna my艣l, jaka przy艣wieca tej bibliotece jest zaczerpni臋ta wprost z kultowej ksi膮偶ki Evansa na temat DDD i bazuje na poj臋ciu agregatu. Agregat to specjalny typ obiektu, kt贸ry posiada i zarz膮dza cyklem 偶ycia, dowi膮zanych do niego obiekt贸w. Biblioteka ta stara si臋 jak najbardziej pom贸c by膰 zgodnym z pomys艂ami DDD i implementowa膰 je w wygodny spos贸b. W du偶ej mierze jej u偶ycie przypomina u偶ycie zwyk艂ego Spring Data, definiowania encji oraz interfejs贸w, ale rezygnuje, chocia偶by z leniwego 艂adowania, warstwowych cache’y, czy nie pozwala na jawne zagnie偶d偶anie mapowanych obiekt贸w, a jedynie pos艂ugiwanie si臋 ich identyfikatorami. Ciekawy artyku艂 z r贸偶nicami na ten temat znajdziesz pod tym adresem https://ordina-jworks.github.io/java/2020/01/02/Spring-Data-Jdbc.html

JOOQ – alternatywa dla Hibernate

https://www.jooq.org/

Je偶eli szukasz dobrego sposobu na dost臋p do bazy danych, to kolejna z propozycji, kt贸ra mo偶e przypa艣膰 Ci do gustu. Biblioteka oferuje mo偶liwo艣膰 pisania czystego SQL na poziomie kodu w Javie z pe艂nym podpowiadaniem sk艂adni i walidacj膮 na etapie kompilacji. Autor biblioteki jest te偶 znany z innego projektu o nazwie JOOL, kt贸ry rozwi膮zuje problem brakuj膮cych element贸w Javy 8.

JOOQ to jedna z tych bibliotek, kt贸re mocno rekomendowa艂em i chwali艂em w Poradniku Juniora Java Developera na rok 2021

T臋 darmow膮 ksi膮偶k臋 mojego autorstwa nadal mo偶esz pobra膰 pod adresem https://niezbednikjuniora.pl

W momencie publikacji tego wpisu ksi膮偶k臋 pobra艂o ju偶 ponad 1600 u偶ytkownik贸w.

Cayenne – kolejna alternatywa dla Hibernate

Apache Cayenne - Wikipedia

https://cayenne.apache.org/

To biblioteka ciekawa ze wzgl臋du na bardzo oryginalne podej艣cie do modelowania klas, kt贸re odbywa si臋 przez udost臋pniony GUI. Obiecuje 艂atwe przepinanie pomi臋dzy r贸偶nymi silnikami bazodanowymi i niski pr贸g wej艣cia nawet dla os贸b nieznaj膮cych SQL.

Cayenne Modeler

MVStore – czyli przechowywanie Mapy poza pami臋ci膮

https://www.h2database.com/html/mvstore.html

Na sam koniec temat, kt贸ry mo偶e nie do ko艅ca mo偶na nazwa膰 baz膮 danych ale jest ciekaw膮 opcj膮 do prototypowania lub innych niekonwencjonalnych zastosowa艅. Je偶eli twoje dane ograniczaj膮 si臋 do zwyk艂ej Mapy w Javie, powy偶sze rozwi膮zanie powinno Ci臋 zainteresowa膰. To rozwi膮zanie z rodziny klasy H2, popularnych baz pami臋ciowych upraszczaj膮ce jednak ca艂y dost臋p do zwyk艂ej mapy.

Budowanie aplikacji

Picocli – narz臋dzie do budowania aplikacji typu CLI

https://picocli.info/

Pierwsz膮 pozycj膮 sekcji bibliotek u艂atwiaj膮cych tworzenie aplikacji jest Picocli, czyli narz臋dzie u艂atwiaj膮ce tworzenie aplikacji konsolowych. Biblioteka posiada przyjemn膮 dokumentacj臋 i dba o wiele element贸w, jakie powinny oferowa膰, wygodne narz臋dzia CLI. Wspiera zar贸wno Jav臋 jak i Kotlina.

Screenshot of usage help with Ansi codes enabled
Przyk艂ad jednej z bibliotek z kolorowymi wiadomo艣ciami pomocy.

LWJGL 3 – biblioteka do tworzenia gier i aplikacji desktopowych

lwjgl3

https://www.lwjgl.org

Od wielu lat siedz臋 g艂贸wnie w aplikacjach webowych, tym z wi臋ksz膮 ciekawo艣ci膮 obserwuj臋 biblioteki z zupe艂nie innego podw贸rka. Tak膮 niew膮tpliwie jest LWJGL. Biblioteka ta posiada bardzo szerokie wspacie oferuj膮c dost臋p do wielu niskopoziomowych API jak:

EGL, OpenCL, OpenGL, OpenGL ES, Vulkan, GLFW, JAWT, nfd, tinyfd, OpenAL, Opus, Assimp, bgfx, DriftFX, LibOVR, meshoptimizer, NanoSVG, NanoVG, Nuklear, par_shapes, par_streamlines, OpenVR, Shaderc, SPIRV-Cross, Tiny OpenEXR, Tootle (AMD), Vulkan Memory Allocator, Yoga, stb, Bullet Physics, CUDA, dyncall, jemalloc, libdivide, LLVM, LMDB, LZ4, ODBC, Remotery, rpmalloc, xxHash, Zstandard.

Uff wymieni艂em przeklei艂em wszystkie. Biblioteka oferuje wysoki poziom modularno艣ci dzi臋ki czemu nie musisz zaprz臋ga膰 ca艂ego kombajnu, a do艂膮czy膰 tylko t臋 cz臋艣膰, kt贸rej akurat potrzebujemy w naszym projekcie.

Jbang – wykorzystanie Javy do pisania skrypt贸w

https://www.jbang.dev/

Dotarli艣my do mojego faworyta ca艂ego zestawienia. Biblioteki, kt贸rej nie zna艂em, a wzbudzi艂a u mnie najwi臋ksze zainteresowanie. Pozycja ta oferuje mo偶liwo艣膰 pisania skrypt贸w w Javie i odpalanie na r贸偶nych platformach, nie wymagaj膮c przy tym od u偶ytkownika 偶adnych zale偶no艣ci, wliczaj膮c w to sam膮 maszyn臋 wirtualn膮 Javy. Jednym z ciekawych zastosowa艅 jest np. mo偶liwo艣膰 szybkiego testowania r贸偶nych bibliotek czy nowych mechanizm贸w j臋zyka. Warto zerkn膮膰, chocia偶by na te przyk艂ady https://github.com/jbangdev/jbang-examples

Micronaut – jako alternatywa do stacka Spring Boot

https://micronaut.io/

Micronaut 艣rednio wpisuje si臋 definicj臋 biblioteki, o kt贸rej nikt nie s艂ysza艂, bo od jakiego艣 czasu dosy膰 g艂o艣no o niej na r贸偶nego rodzaju konferencjach. Dla os贸b, kt贸re jednak s膮 mocno zanurzone w 艣wiecie Springowym, mo偶e wpisywa膰 si臋 w tak膮 definicj臋. Biblioteka wymieniana jest jednym tchem w parze z GraalVM i Serverlessem, co jest chyba najsilniejszym argumentem, aby bli偶ej zapozna膰 si臋 z jej mo偶liwo艣ciami.

Testy i jako艣膰

SpockFramework – ulubione narz臋dzie do testowania

http://spockframework.org/

To bez w膮tpienia jedna z moich ulubionych bibliotek. Bardzo podoba艂 mi si臋 jeden z komentarzy w w膮tku, kt贸ry stwierdzi艂, 偶e kto raz spr贸bowa艂 pracy ze Spockiem, nie wr贸ci do 偶adnej innej biblioteki. Podpisuj臋 si臋 pod nim obiema r臋koma. Faktycznie to ta biblioteka, kt贸ra sprawia, 偶e pisanie test贸w staje si臋 przyjemno艣ci膮 i a偶 dziw bierze, 偶e nie zdetronizowa艂a alternatyw w swojej klasie.

Testcontainers – uruchamianie zale偶nych serwis贸w w testach jako kontenery

Testcontainers logo

https://www.testcontainers.org/

Pisz膮c testy integracyjne, mo偶emy p贸j艣膰 drog膮 mockowania lub skorzysta膰 z mo偶liwo艣ci testcontainers, kt贸ra pomo偶e nam z zale偶no艣ciami typu kolejki czy bazy. To jedna z tych bibliotek, kt贸ra raz u偶yta na stale pozostaje w arsenale developerskim.

Pitest – testy mutacyjne

PIT Mutation Testing

https://pitest.org/

Czy s膮 lepsze metryki oceniaj膮ce ich jako艣膰 ni偶 pokrycie kodu testami? Jedn膮 z bibliotek, kt贸ra udowadnia, 偶e tak jest pitest, czyli ca艂kiem udana pr贸ba implementacji idei test贸w mutacyjnych w Javie.

Mockneat – generator mockowych danych w popularnych formatach

https://www.mockneat.com/

Czasami tego rodzaju w膮tki przyci膮gaj膮 nie tylk, fan贸w jakiego艣 rozwi膮zania co r贸wnie偶 i samych autor贸w. Tak jest w tym przypadku, gdzie w w膮tku udzieli艂 si臋 autor rozwi膮zania Mockneat. Ma ono na celu sprawi膰, aby generowane dane testowe by艂y nieco lepszej jako艣ci ni偶 dupa8 pozwalaj膮c przy tym na bycie zgodnym z jednym z popularnych format贸w. Daje ciekawe mo偶liwo艣ci generowania danych mog膮cych wprost zasili膰 baz臋 SQL, XML, CSV czy jsony.

Projektem o zbli偶onej tematyce, ale w formie serwisu jest https://www.mockaroo.com za艣 innym projektem skupionym bardziej na samych danych jest https://github.com/Devskiller/jfairy

Error Prone – wy艂apywacz prostych b艂臋d贸w

https://errorprone.info/index

To biblioteka w formie plugin’u podpinanego do jednego z popularnych system贸w typu Gradle lub Maven. Dzia艂a na poziomie kompilacji kodu i pozwala na wy艂apywanie popularnych b艂臋d贸w w kodzie w my艣l zasady fail-fast

Ciekawym rozszerzeniem biblioteki jest https://github.com/uber/NullAway

AssertJ – przyjemne w odbiorze asercje w testach

https://assertj.github.io/doc/

To chyba najprzyjemniejszy spos贸b na asercje. Sprawia, 偶e s膮 one przyst臋pne zar贸wno w przypadku ich pisania, czytania jak i p贸藕niejszej analizie zwracanych rezultat贸w.

Procesowanie danych

Jsonpath – DSL do czytania json贸w

https://github.com/json-path/JsonPath

Jsonpath jest ciekawym podej艣ciem do czytania plik贸w w tym formacie. Sk艂adania jest bardzo prosta, prostsza ni偶 np w popularnym narz臋dziu jq (o r贸偶nicach mozesz przeczyta膰 np tutaj https://github.com/stedolan/jq/wiki/For-JSONPath-users) Pomys艂, aby opakowa膰 te funkcjonalno艣ci w Javie i u偶ywa膰 jako biblioteki, mo偶e czasem znale藕膰 zastosowanie, w szczeg贸lno艣ci, gdy zaczynamy m贸wi膰 o naprawd臋 du偶ych plikach.

Fastexcel – wydajny spos贸b na generowanie plik贸w excel

https://github.com/dhatim/fastexcel

Chyba najpopularniejsz膮 pozycj膮 艂膮cz膮c膮 艣wiat javy i Excela jest POI. Fastexcel to rzucona r臋kawica w jej stron臋, udowadniaj膮ca, 偶e da si臋 stworzy膰 narzedzie o wiele bardziej wydajne, zar贸wno pod wzgl臋dem konsumowanej pami臋ci i czasu generacji. Poni偶sze wykresy pokazuj膮, 偶e r贸偶nice w standardowym u偶yciu s膮 ogromne. Poza tym biblioteka jest chwalona, za bardzo prostolinijn膮 abstrakcj臋.

Roaringbitmap

https://github.com/RoaringBitmap/RoaringBitmap

„Po jakim艣 czasie wygl膮da na to, 偶e ka偶dy problem da si臋 rozwi膮za膰, przy u偶yciu bitmap”

cyt. „Po jakim艣 czasie wygl膮da na to, 偶e ka偶dy problem da si臋 rozwi膮za膰, przy u偶yciu bitmap”

Roaringbitmap jest podwalin膮 wielu silnik贸w indexowania, u偶ywa jej mi臋dzy innymi YouTube SQL Engine, Apache Lucene, Solr, Elastic. Rozwi膮zanie to znajdziesz r贸wnie偶 w InfluxDB, Bleve i wielu innych popularnych bibliotekach Dobre wyt艂umaczenie kiedy to rozwi膮zanie mo偶e okaza膰 si臋 przydatne jest tutaj – w wielkim skr贸cie chodzi o efektywniejsze wykorzystanie zasob贸w pami臋ci w skrajnych przypadkach.

Apache Tika – ciekawe narzedzie do analizy zawarto艣ci plik贸w

https://tika.apache.org/

Biblioteka ta rozpoznaje tysi膮ce r贸偶nych format贸w plik贸w. Wydaje si臋 bardzo przydatna podczas indeksowania, analizy zawarto艣ci, t艂umaczeniach i wielu innych zastosowaniach, w kt贸rych kluczow膮 rol臋 odgrywaj膮 metadane i obs艂uga wielu format贸w plik贸w.

Jolt – transformowanie json贸w

https://github.com/bazaarvoice/jolt

Umo偶liwia konwersj臋 plik贸w json z jednego formatu na inny, w oparciu o schemat zdefiniowany r贸wnie偶 jako json. W skr贸cie mo偶na o tym rozwi膮zaniu my艣le膰 jak o xslt dla json贸w.

Zarz膮dzanie kodem

immutables – automatyczne generowanie niemutowalnych obiekt贸w

https://immutables.github.io/

Problem domy艣lnej mutowalno艣ci w Javie jest znany nie od dzi艣 i rozwi膮zany np. w Kotlinie. 艢wietna biblioteka, kt贸ra powoduje, 偶e mo偶emy temu zaradzi膰 to immutables.

MapStruct – konwersja obiekt贸w

https://mapstruct.org/

To jeden z przyk艂ad贸w mapper贸w, jakie pojawi艂y si臋 w zestawieniu. Cechuje go to, 偶e mapuje obiekty na poziomie kompilacji. Jak trafnie zauwa偶y艂 jeden z u偶ytkownik贸w, nale偶y rozwa偶nie u偶ywa膰 tego typu bibliotek przy Hibernate, poniewa偶 mog膮 one stanowi膰 mieszank臋 i艣cie wybuchow膮.

Eclipse Collections – wysokowydajna implementacja podstawowych struktur

https://eclipse.github.io/eclipse-collections-kata/shared/eclipse-collections-logo.png

https://www.eclipse.org/collections/

To bardzo ciekawa pozycja alternatywnych kolekcji. Wsz臋dzie tam, gdzie istotn膮 rol臋 odgrywa zysk w czasach GC i og贸lnej wydajno艣ci, u偶ycie tego typu kolekcji mo偶e by膰 bardzo dobrym pomys艂em.

API

Vert.x – lekkie i proste REST API

https://vertx.io/

To ciekawa warta rozwa偶enia alternatywa do Spring Boota. Je偶eli planujesz budow臋 API RESTowego, Vert.x mo偶e by膰 strza艂em w dziesi膮tk臋.

Retrofit – http client

Resilience4j – strategie zarzadzania b艂臋dami odpowiedzi

GitHub - resilience4j/resilience4j: Resilience4j is a fault tolerance  library designed for Java8 and functional programming

https://resilience4j.readme.io/

W g膮szczu link贸w pojawi艂a si臋 te偶 pozycja dbaj膮ca o strategi臋 w jaki spos贸b b臋dziemy si臋 integrowa膰 pomi臋dzy serwisami. Znajdziesz w niej chocia偶by implementacj臋 wzorca circuit breaker

Wiremock – narz臋dzie do mockowania API

WireMock Request Logging 鈥 The Blog of Ivan Krizsan

http://wiremock.org/

Dobra biblioteka do symulowania zewn臋trznych serwis贸w, kt贸rych sami nie kontrolujemy. Znajdzie zastosowanie we wcze艣niejszych fazach developmentu czy testach.

Metryki

Oshi – czyli twarde metryki z twojej maszyny

https://github.com/oshi/oshi

Biblioteka to 艣wietny spos贸b na wyci膮gni臋cie twardych metryk o maszynie na, kt贸rej uruchamiany jest nasz kod.

Opentelemetry – uwsp贸lnione podej艣cie do tracingu

https://github.com/open-telemetry/opentelemetry-java

Na zako艅czenie biblioteka, kt贸ra stara si臋 uporz膮dkowa膰 temat 艣ledzenia request贸w w architekturze rozproszonej.

Tw贸j wynik?

A teraz tak szczerze, o ilu pozycjach nigdy nie s艂ysza艂e艣?

M贸j wynik to 13/31, chocia偶 przyznaje bez bicia, 偶e jest te偶 kilka pozycji, kt贸re kojarzy艂em tylko z nazwy, a nigdy nie mia艂em z nimi bli偶szej styczno艣ci. Kilka na tyle mnie zaciekawi艂o, 偶e za jaki艣 czas z ch臋ci膮 do nich wr贸c臋 i zastosuj臋 przy nadarzaj膮cej si臋 okazji.

A mo偶e sam wiesz o bibliotekach, kt贸re nie zosta艂y tutaj zawarte, a powinny? Podziel si臋, prosz臋 w komentarzu.

呕r贸d艂o: https://www.reddit.com/r/java/comments/jfdnnd/what_are_some_great_java_libraries_im_probably/