Dawno, dawno temu, w ramach cyklu Przybornik Javowca planowałem publikować artykuły na temat różnego rodzaju sprawdzonych bibliotek, frameworków i innych narzędzi, które pomagają programiście Java w codziennej niedoli. W sumie opublikowałem dwa wpisy, a huczne plany się rozmyły. Niemniej jednak cały czas, gdzieś głęboko w notatkach miałem zapisane kilka bibliotek, o których istnieniu i przydatności chciałem się podzielić. Ale pisanie odrębnych artykułów na temat każdej z nich jakoś nie zachęcał mnie do ruszenia tematu. Postanowiłem podejść do sprawy inaczej. Zdecydowałem się wykorzystać cykl Piątki z plusem i zrobić krótkie podsumowanie moich notatek w jednym artykule. I oto jest 🙂
Postanowiłem wrzucić tylko te biblioteki, z którymi regularnie mam styczność w moich projektach i które często pojawiają się w nich niezależnie od typu aplikacji, czy oprogramowywanej domeny.
O Lomboku (pełna nazwa to chyba „Project Lombok”) był odrębny artykuł. Mimo tego, powtórzę się jeszcze raz, bo zazwyczaj jest to jedna z pierwszych bibliotek, którą dołączam do projektu napisanego w czystej Javie. Dla przypomnienia: służy do zredukowania ilości nadmiernego, powtarzającego się kodu, typu gettery, settery, buildery, czy konstruktory.
Flyway, podobnie jak Lombok, był już przeze mnie przedstawiany. Więc w ramach krótkiego przypomnienia, powiem tylko, że biblioteka służy do wersjonowania i trzymania w ryzach schematów relacyjnych baz danych, w połączeniu z produkcyjnym kodem projektu. Dzięki niemu problemy pominiętej kolumny podczas aktualizacji środowiska przeszły do lamusa.
Cykl artykułów "Przybornik Javowca"
Ten wpis jest częścią cyklu, w ramach którego opisuję moje doświadczenia i spostrzeżenia na temat różnego rodzaju sprawdzonych bibliotek, frameworków i innych narzędzi, które pomagają programiście Java w codziennej niedoli
Artykuły z tej serii łączą się wyłącznie tematyką i nie są ze sobą mocno związane, a więc spokojnie możesz je czytać wybiórczo. Wszystkie opublikowane do tej pory wpisu znajdziesz poniżej:
- Lombok – the boilerplate killer
- Flyway – dbaj o swoje relacje
- biblioteki przydatne w projektach Java
Apache Commons to nie jedna, ale cały zbiór bibliotek stawiających sobie za cel opakowanie i utrzymywanie często powtarzających się fragmentów funkcjonalności. Pełna lista bibliotek dostępna jest na stronie projektu. Znajdziemy tu choćby bibliotekę dostarczającą dodatkowe metody do standardowych elementów języka Java, do pracy z kolekcjami, czy przy powtarzających się operacjach wejścia/wyjścia.
Konkurencja/alternatywa/uzupełnienie dla Apache Commons.
Chociaż Apache Commons mają swoją bibliotekę do pracy z plikami CSV, to mi zazwyczaj bliżej jest do biblioteki opencsv.
Jeżeli tylko w naszej aplikacji mamy jakieś cyklicznie wykonywane, zaplanowane zadania i mamy więcej niż jedną instancję aplikacji, to często musimy zadbać o to, żeby wykonywały się one tylko na jednej instancji. ShedLock może nam w tym pomóc, wykorzystując wybraną bazę danych jako miejsce przechowywania locka.
Subiektywnie, według mnie (choć nie tylko), jest to najlepszy framework do testów jaki przytrafił się projektom Javowym. Ale uwaga, została ona napisana w… języku Groovy. Testy są o wiele czytelniejsze niż w konkurencyjnych projektach napisanych w Javie, ale próg wejścia jest nieco wyższy, bo bez podstawowej znajomości języka Groovy, czy zasad działania Spocka, możemy się sporo nagłówkować dlaczego dany test działa lub nie działa 🙂
Mały, przyjemny w obsłudze zestaw narzędzi do testowania wysyłki maili.
I na koniec, cały czas zostając przy testowaniu, mamy bibliotekę Testcontainers, która w łatwy sposób dostarcza instancje najpopularniejszych (nie tylko) baz danych opakowanych w kontenery Dockera.
Coś jeszcze?
To tyle ode mnie. Być może coś jeszcze bym znalazł, ale część bibliotek uzależnionych jest od specyfiki projektu, a w tym artkule chciałem zawrzeć te najbardziej „uniwersalne”. Co myślisz o powyższej liście? Czy czegoś na niej brakuje? Jaka jest Twoja ulubiona biblioteka wykorzystywana w projektach Java? Komentarze poniżej są do Twojej dyspozycji 🙂
Picture Credits
19 marca 2021 at 17:24
Cześć,
Przepraszam, że nie odpisałem, ale to moje początki w Disqus i nie zauważyłem powiadomienia 😉 Na szczęście Ryszard już dał znać.
Ja także nie miałem do czynienia z Flyweight, ale domyślam się, że jak już to zmiany są kosmetyczne. Dopisałem Liquibase, bo akurat mam z nim styczność na co dzień. 🙂
20 marca 2021 at 08:57
Spoko 🙂 W międzyczasie Disqus zdążył odejść 😉
24 marca 2021 at 18:31
Super! Jak dla mnie słuszna decyzja 😉
19 stycznia 2021 at 22:29
Cześć! Ciekawą alternatywą dla Flyway jest także Luquibase. Obecnie go wykorzystuję w pracy i muszę przyznać, że dobrze się sprawuje. Oczywiście, tak jak wspomniał Filip, na pewno musisz przyjrzeć się vavr, bo naprawdę daje dużo większe możliwości niż funkcyjność w Javie np. immutable lists!
22 stycznia 2021 at 08:08
Cześć.
Faktycznie, o Luquibase słyszałem, ale nie miałem okazji używać. Nie przypominam sobie problemów z Flywayem, to też nie szukałem alternatyw 😉 Widzisz jakąś przewagę, czy nie miałeś okazji porównywać?
Wygląda na to, że muszę chociaż rzucić okiem na tego vavr-a 🙂
13 lutego 2021 at 13:33
Też polecam Liquibase, korzystałem w wielu projektach. Ale jeżeli Flyway spełnia to samo zadanie to pewnie mała różnica.
A co do Vavr, Apache Commons i innych takich bibliotek, to od kiedy korzystam z Kotlina, nie miałem ani razu potrzeby zaciągania tego typu bibliotek. Polecam najbardziej.
17 lutego 2021 at 08:20
No właśnie nigdy nie miałem odczucia, żeby czegoś we Flyway-u mi brakowało. Stąd też nigdy nie zdecydowałem się na testy Liquibase.
Co do Kotlina, to zdaję sobie sprawę, że to są akurat „ułomności” języka Java w dużej mierze, ale mam akurat projekt w Javie. W sumie pewnie mógłbym dodać do tego Kotlina, ale nie wiem jak by się to odbiło na projekcie. Do przemyślenia 🙂
16 stycznia 2021 at 20:32
vavr.io – jak ktoś programuje w duchu funkcyjnym 😉
19 stycznia 2021 at 14:27
Faktycznie znam, ale całkiem o tym zapomniałem. Odkąd jest Java 8 jakoś nigdy nie miałem potrzeby korzystania z dodatkowej biblioteki funkcyjnej. Filip, czy w Twoim odczuciu coś tracę?