Czy ktoś miał doświadczenie? Dzisiaj w pracy w ramach dnia na eksperymenty próbowałem napisać jakiś PoC z wykorzystaniem rzeczonych modułów. Po kilku godzinach zabawy mam następujące wnioski:
-
IntelliJ nie jest skory do współpracy z modułami. Jeżeli w swoim kodzie planuje użyć klasy z biblioteki, to nie jest ona widoczna w momencie, gdyż nie ma odpowiedniego wpisu w pliku
module-info.java
. Są 2 opcje: trzeba wcześniej znać moduł w którym znajduje się rzeczona klasa, dodać wpis wmodule-info.java
i wtedy można ją zaimportować, bądź trzeba znać pakiet, wpisać ręcznie import i wtedy IntelliJ podpowie w jakim module się on znajduje. Głowa to nie śmietnik, więc żadna z tych opcji mnie nie zadowala - jedyne na co wpadłem w tym krótkim czasie było zakomentowanie całegomodules-info.java
na czas importów, a następnie odkomentować i zdać się na IDE w autouzupełnianiu odpowiednich wpisów wmodule-info.java
. Alternatywą jest szukanie klasy w zależnościach i przeważnie wMANIFEST-INF
znajduje się nazwa modułu, ale to odpada - za dużo roboty. -
dostawcy bibliotek wciąż są z tyłu. W przypadku zależności do Springa wystąpił błąd: Error module A reads package B from both C and D (https://intellij-support.jetbrains.com/hc/en-us/community/posts/360001517680-Error-java-module-A-reads-package-B-from-both-C-and-D-on-Java-11-project). Rozwiązanie takie, jak w komentarzach, czyli wykluczenie zależności do hamcresta i skyscreamera:
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
exclude group: 'org.hamcrest', module: 'hamcrest-core'
exclude group: 'org.skyscreamer', module: 'jsonassert'
}
gdyby podobne konflikty wystąpiły w innych zależnościach i trzeba by było analizować konflikty zależności samemu, to byłoby to trochę niefajne.
- testowanie - to nie jest wcale takie oczywiste, gdyż
modulepath
namieszał ponownie. standardowe pisanie testów, w którym klasy testowe znajdują się w pakiecie o takiej samej nazwie co kod źródłowy już niestety nie działa. Rozwiązanie problemu znalazłem tutaj: https://sormuras.github.io/blog/2018-09-11-testing-in-the-modular-world, ale jestem już na tyle znużony, że nawet nie chce mi się na to dzisiaj patrzeć.
Jakie są wasze doświadczenia? Chętnie przyjmę ewentualne wskawzówki. Zapraszam do dyskusji.