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 w module-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łego modules-info.java na czas importów, a następnie odkomentować i zdać się na IDE w autouzupełnianiu odpowiednich wpisów w module-info.java. Alternatywą jest szukanie klasy w zależnościach i przeważnie w MANIFEST-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.