Spis treści

Java w VSCode

Java na szybko

Załóżmy, że potrzebujesz “na szybko” napisać jakiś program w Javie. Jakiego edytora użyjesz? Myślę, że większość Javowców, nawet jeśli są wyznania Vim-owego albo wyznawcami Kościoła Emacs, ucieknie się do uruchomienia grubego IDE takiego jak Eclipse, IntellijIdea lub - szczególnie ostatnimi laty - VSCode.

Przynam się, że ja też jakś czas temu zainstalowałam VSCode (zdaje się, że przy okazji nauki języka Go). Wciąż się docieramy (ja i VSCode) - mimo możliwości “podpięcia” sktótów klawiszowych z innych IDE wciąż staram się nauczyć sktótów właściwych dla VSCode i zrozumieć “filozofię” tego edytora.

Tym razem postanowiłam sprawdzić, jak zachowuje się VSCode podczas rozwijania projektu w Javie.

Instalacja rozszerzeń

Instrukcje instalacji rozszerzeń obsługujących język Java są podane w artykule pomocy dla języka Java na stronie vscode i w zasadzie tłumaczą wszystko. Spróbuję więc stworzyć prostą aplikację w Javie używając systemu budowania Maven.

Podstwowy zbiór rozszerzeń

Na początku trzeba zacząć od podstawowego zbioru rozszerzeń ze sprwdzonego źródła, dzięki króremu będzie możliwe wygodne (tj. z kolorkami i podpowiedziami) pisanie kodu w Javie.

Screenshot VSCode z otwartą stroną Extension Pack

Zainstalowałam więc pakiet “Java Extension Pack”. Otrzymuję:

  • wsparcie dla języka (linting, formatowanie) od RedHat
  • debugger od Microsoft

Tworzenie nowego projektu

Projekt mavenowy

Magiczny skrót Ctrl-Shift-P otwiera command palette (paletę poleceń), w której wpisuję i wybieram “create new maven project”:

Create new project w command palette

Wybieram:

  • nazwę archetypu (wybrałam pierwszą- maven-archetype-quickstart) i jego wersję
  • podaję groupId oraz artifactId

W terminalu widzę, że w tle ściągają się zależności potrzebne do zbutowania projektu. Potwierdzam wersję mojego projektu (1.0-SNAPSHOT) i już.

Inne typy projetu

Mogę utworzyć wiele różnych typoów projektów, nie tylko projekt mavenowy:

Wybór typów projektów

Te inne typy projektów spróbuję utworzyć później. Na razie spróbujmy uruchomić domyśnie wygenerowany (na podstawie archetypu) test.

Uruchomienie domyślnego testu

Pierwszy problem:

Uruchomienie z “command palette”

“Java: run tests” z command palette wyświetla błąd:

Błąd uruchamiania testów z palety

Uruchomienie z “java projects”

Error running command java.test.runFromJavaProjectExplorer: command ‘java.test.runFromJavaProjectExplorer’ not found. This is likely caused by the extension that contributes java.test.runFromJavaProjectExplorer.

Błąd uruchamiania testów z widoku java projects

Uruchomienie z widoku mavena

Dopiero gdy wchodzę do widoku mavena i uruchamiam bezpośrednio fazę “test”, projekt się buduje i uruchamia testy.

Uruchomienia testów z widoku mavena

Uwaga: błąd, który otrzymywałam próbując uruchomić testy z widoku “Java Projects” zniknął samoistnie po ponownym otworzeniu projektu.

Tworzenie aplikacji SpringBoot

Zaintrygowała mnie możliwość stworzenia aplikacji SpringBoot z VSCode, więc postanowiłam spróbować:

/posts/java-vscode/create_project_spring.png

Uwaga: uruchamianie serwera językowego dla Javy - polegające chyba na przeskanowaniu wszystkich jarów na classpath - może trwać bardzo długo.

Po zainstalowaniu rozszerzenia “Spring Initializr Java Support” można z poziomu VSCode wybrać potrzebne startery:

/posts/java-vscode/spring_boot_initializers.png

Później, gdy okaże się, że czegoś jeszcze brakuje, moża listę starterów wygodnie poszerzyć, wybierając z palety opcję Spring Initializer: Add starters....

/posts/java-vscode/spring_boot_created.png

Rozwijanie aplikacji

Kiedy aplikacja już została utworzona, warto zapoznać się z kolejnym rozszerzeniem: “Spring Boot Tools”:

/posts/java-vscode/boot-tools.png

Uwaga: po zainstalowaniu dodatku warto ponownie otworzyć projekt(y), aby umożliwić poprawne ich przeskanowanie i zebranie potrzebnych informacji. Niestety,nie dzieje sie to automatycznie dla już otwartych projektów.

Większe możliwości pracy ze Springiem

Po jego zainstalowaniu pojawiają się interesujące możliwości:

  • właściwości aplikacji w application.properties (lub application.yaml): sprawdzanie poprawności, podpowiadanie wartości (uzupełnianie kodu)
  • informacje o aktualnie uruchomionej aplikacji (PID procesu, po najechaniu na deklarację wstrzykniętego beana: klasa i nazwa beana w czasie wykonania)
  • nawigacja po dostępnych endpointach w aplikacji (skrót: Ctrl-T):
    • @/ pojazuje zdefiniowane mapowania żądań REST (ścieżka, metoda, plik źródłowy)
    • @+ pokazuje zdefiniowane beany springowe (nazwa, typ, plik źródłowy)
    • @> pokazuje funkcje
    • @ pokazuje adnotacje springowe w kodzie
  • możliwość łatwego uruchamiania i zatrzymywania aplikacji

Na przykład:

/posts/java-vscode/navigation.png

Alternatywa: jeden plugin to rule them all

Obydwa rozszerzenia można zainstalować za jednym zamachem: wystarczy odszukać rozszerzenia “Spring Boot Extension Pack”, który zawiera (opakowuje) dwa wspomniane wyżej:

/posts/java-vscode/extension-pack.png

Uruchamianie aplikacji

Nezawodnym sposobem uruchomienia aplikajci spring-boot - i według mnie najwygodniejszym -jest zrobienie tego z poziomu wiersza poleceń. Po wpisaniu mvn spring-boot:run uruchamiana jest aplikacja z logami Springa wypisywanymi (domyślnie) na wyście standardowe terminala.

Jeśli jest zainstalowany powyższy dodatek, można wykorzystać widok “Spring Boot Dashboard”, dzięki któremu łatwiej “zarządzać” uruchomieniami aplikacji:

/posts/java-vscode/dashboard.png

Testowanie

Wszystkie testy uruchamiają się z widoku testowania bez zarzutu. Można uruchamiać je pojedynczo bądź w całości (nawet dla wielu projektów na raz, jeśli są częścią workspace-a):

/posts/java-vscode/testing_view.png

Ukryte smaczki

Warto pamiętać o tym, że dużo przydatnych opcji jest w VSCode schowanych w menu kontekstowym. Warto zatem sięgnąć po myszkę i poklikać jej prawy przycisk w różnych kontekstach.

W kodzie źródłowym Javy pojawiają się tam dwie ciekawe pozycje:

  • refactor (skrót: Shift-Ctrl-T
  • Code Action (domyślnie bez skrótu)

Pierwsza posiada zbiór dostępnych refaktoryzacji; druga pozwala na wygenerowanie testów, konstruktorów, implementacji equals/hashCode itp.

Podsumowanie

Na pierwszy rzut oka da się dość szybko uzyskać funkcjonalne środowisko do programowania w Javie. Warunkiem powodzenia jest oczywiście zaistalowanie dodatków: RedHat, Pivotal i Microsoft (a także twórcy wielorakch pluginów) zrobili kawał dobrej roboty.

Na pewno jest to niezła altrnatywa dla tych, którzy nie mogą sobie pozowlić na zakup licencji na wersję Ultimate IntellijIdea, a tworzą projekty webowe, w szczególności w Spring Boot.

Jak to zwykle w takich sytuacjach bywa, nowe IDE oznacza natychmiastowy spadek efektywności pracy z kodem do czasu, aż człowiek:

  • nauczy się nowych skrótów klawiszowych
  • dowie się, jak działają pewne specyficzne dla danego IDE procesy: taski, makra, preferencje, workspace-y
  • wbuduje w pamięć mięśniową sposoby wykonywania pewnych zadań takich , jak: refaktoryzacja, przełączanie się między kodem a testem, zwijanie/rozwijanie (folding/unfolding)
  • poczyta o swoim nowym IDE w oficjalnej dokumentacji