Kotlin
2023-08-02
Po godzinach bardzo mocno eksperymentowałem z platformą do przechowywania oraz udostępniania fragmentów kodu. Do tego konieczny był komponent podkreślania składni używany w wielu miejscach I w różnych przypadkach.
Większość istniejących bibliotek sprawdzało się tylko w jednym przypadku i do tego trzeba było szukać innego rozwiązania na każdą z platform.
Zacząłem więc pisać własny silnik do analizy oraz kolorowania składni. Stał on się między innymi częścią projektu SnippLog:
Aplikacja SnippLog
Kodu jednak było tak dużo, że szkoda byłoby to pozostawić ukryte, toteż przystąpiłem do tworzenia biblioteki.
Ogólnie rzecz biorąc, aby utworzyć bibliotekę multiplatformową w Kotlinie należy stworzyć projekt JVM i dołożyć kilka cegiełek.
Większość konfiguracji sprowadza się do edycji głównego pliku build.gradle.kts.
Do pluginów dodajemy lub zmieniamy na wariant multiplatform. Następnie należy utworzyć sekcję kotlin.
Tutaj pierwsza rada. Wersja wybranego pluginu Multiplatform ma wpływ na wersję języka, a co za tym idzie często też IDE.
Sugeruję na samym początku zaktualizować wszystkie zależności oraz narzędzia do najnowszej wersji i wtedy dopiero przystąpić do pisania kodu.
Żeby wszystkie zależności mogły się poprawnie pobrać, należy jeszcze dodać kilka rzeczy w settings.gradle.kts:
Struktura folderów zależy od tego na jakie platformy będziemy pisać niezależny kod.
W tym przypadku celem było stworzenie projektu w czystym Kotlinie. Do tego potrzebne są tylko dwa foldery:
commonMain - kod źródłowy bez zależności typowo platformowych
commonTest - testy gotowe do uruchomienia w środowisku JVM
Gdyby potrzebne były specyficzne implementacje to kolejno należy zdefiniować iosMain, androidTest, linuxMain.
Mimo, że kod jest gotowy do użycia bez względu na środowisko, to każdy z docelowych targetów trzeba zdefiniować ręcznie.
Pro tip: istnieją agregujące warianty takie jak ios() czy android(). Dzięki ich użyciu możemy trochę zoptymalizować kod.
Dla każdego wariantu zostanie wygenerowany jar, pom oraz wszystkie metadane, które biblioteka powinna mieć.
Gdy dokonamy w jakimś projekcie implementacji dev.snipme.highlights to automatycznie zostanie zaciągnięta źródło np. dev.snipme.highlights-iosarm64 lub dev.snipme.highlights-jvm
Dlatego należy opublikować wszystkie artefakty, które zamierzamy wspierać naszą biblioteką.
Analogicznie, gdy zaimportujemy jakąś z bibliotek multiplatformowych do commonMain, to system sam odnajdzie odpowiadający artefakt, a my nie musimy się o to martwić 😀
Nawet w tak prostym projekcie potrzebowałem skorzystać z Kotlinowej biblioteki do testów. Import wygląda następująco:
Może się jednak zdarzyć, że twórca nie opublikował projektu w formie Kotlin Multiplatform i należy wtedy skorzystać z zależności per architektura.
Wtedy można wyszczególnić dla jakiej kompilacji używamy zależności i po prostu ją zdefiniować:
Jednak wiele projektów wspiera już obecnie Kotlin Multiplatform dlatego najpierw sugeruję spróbować skorzystać z ogólnego wariantu biblioteki w commonMain.
Na ten temat można znaleźć bardzo dużo różnych wpisów. Sporo jest dla samej javy, ale znajdziemy też te pod kątem nowoczesnego Kotlina.
Tutaj radzę po prostu korzystać z oficjalnych poradników na stronach JetBrains.
Są one aktualne, precyzyjne i wyczerpujące temat. Jeżeli chodzi o publikację biblioteki to ten artykuł jest chyba jednym z lepszych:
Create and publish a multiplatform library – JetBrains tutorial
Nie bez wysiłku, ale udało się opublikować pierwszą bibliotekę na Maven Central I to jeszcze wielo-platformową!
Biblioteka Highlights - Github
Jest to narzędzie open source do analizy oraz kolorowania składni. Dzięki niemu rozłoży my sobie fragment kodu na części pierwsze i dodatkowo pokolorujemy 😊
Mam nadzieję, że te rady pomogą trochę lepiej odnaleźć się twórcom w jeszcze bardzo chaotycznym świecie Kotlin Multiplatform oraz KMM.
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.