Czy używacie Java 9 Modules?

1

Chodzi mi o jigsawowe moduły z Javy 9, czyli nadal dość świeża technologia (nie osgi).

Używacie tego w nowych projektach, dlaczego nie? Migrujecie istniejące na moduły? Ogólnie co o tym sądzicie?

Jeśli nie warto tego używać, to dlaczego to weszło w życie?

3

Co prawda kodzę w Scali, a nie w Javie, ale i tak odpalam na JVMie, więc odpiszę.

Używacie tego w nowych projektach, dlaczego nie? Migrujecie istniejące na moduły? Ogólnie co o tym sądzicie?

Nie używamy i nie mamy w planach. Java nie wymaga przechodzenia na moduły. Można korzystać z najnowszych rzeczy bez przerabiania systemu na jigsawowy.

Jeśli nie warto tego używać, to dlaczego to weszło w życie?

Warto używać, ale np. użyteczność może spaść jeśli korzystasz z mikroserwisów - architektura mikroserwisowa to samo w sobie podzielenie systemu na osobne wyspy, więc moduły nie wniosą tu dużej wartości dodanej.

Jigsaw wszedł w życie nie tylko po to, by zmodularyzować aplikacje użytkowników Javy, ale też po to, by zmodularyzować samą Javę. Wszystkie nowe bajery (i stare też) w Javie są poupychane w modułach JDK. Dzięki precyzyjnemu opisaniu których modułów potrzebujesz, programy typu jlink mogą stworzyć zoptymalizowaną (pod względem przede wszystkim rozmiaru, ale też np. czasu uruchamiania) dystrybucję JRE.

3

Jeśli nie warto tego używać, to dlaczego to weszło w życie?

One raczej nie są od tego żeby używać je w aplikacjach końcowych raczej (czyli tych enterprajsach w Springu) tylko jak masz jakieś biblioteki, frameworki etc i chcesz schować internale.

Ogólnie co o tym sądzicie?

Nie brak opini że to trochę overkill. Tzn enkapsulacja na poziomie modułu (czyli jara) ma sens, ale być może taki Kotlinowy internal wystarczy.

4

Z tymi modułami jest jeszcze trochę problemów, niektóre biblioteki np. Guava mówią że nie wspierają i wspierać nie będą - jedyne co dodali to "automatic name" w JARrze. IntelliJ do niedawna też nie uaktualniał module-info.java gdy importowało się nową klasę z nowego modułu. Są problemy z Junit 5 trzeba dodawać --add-opens w maven surfire plugin'ie. I to są doświadczenia z mojego malego pet-projektu w JavaFX gdzie moduły są konieczne żeby jlink'iem wygenerować paczki dla Linuxa i mac'a.

IMHO tooling pomimo upływu czasu nie jest jeszcze dostatecznie dojrzały. Jak ktoś ma wybór OSGi vs Java 9 modules to pewnie moduły są lepszym wyborem (bo mają przyszłość). Jak ktoś się zastanawiam Java 9 modules vs maven/gradle module management to bym brał to drugie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1