Wpis z mikrobloga

via Wykop Mobilny (Android)
  • 2
#programowanie #java #spring #springboot #maven

Jeśli robicie małą aplikację w Spring Boocie to po prostu uruchamiacie ją jako JAR.

Ale co jak do tej aplikacji ma dojść jakiś mały frontend (np. formularz, który będzie strzelał do tego backendu i jakaś pobierana lista)?

Kiedyś robiło się tak:
- MVC i front w JSP - już tak się nie robi,
- MVC i front w Thymeleaf - też już stare i chcę mieć one page app,
- Front w HTML i JS, do tego jQuery albo inny framework pobierany jako JS w index.html, wszystko wrzucone do resource apki backendowej.

Teraz front robi się w Angular/React (budowane przez Webpack i npm, a nie zwykły plik index.html) i stawia jako oddzielną aplikację.

Ale ja nie potrzebuję oddzielnej aplikacji (dodatkowo problem dla adminów, bo się komplikują wdrożenia), chcę mieć to w jednym jarze.

Jak do tego podchodzicie?
Pakujecie Mavenem (który plugin?) czy jak inaczej?
  • 17
via Wykop Mobilny (Android)
  • 0
@Enviador: ale po co ma być oddzielnie?

Robię bardzo małe aplikacje, których używa kilka osób. Odpalam jar-a i aplikacja stoi. Po co mam to komplikować jak nic mi to nie daje?
via Wykop Mobilny (Android)
  • 0
@Kuriozal: no tak, mogę zbudować ręcznie front, wrzucić do static, zbudować backend, pilnować, żeby w folderze static git ignorował tylko te wrzucone pliki (bo przecież mogą być inne)... Tylko czy muszę robić to ręcznie?

Istnieje plugin do Mavena, który niby to robi automatycznie. Ale czy to dobre podejście? Ten plugin jest mało popularny, rozwijamy głównie przez jedną osobę, więc w każdej chwili może już nie być wspierany.

Nie wiem jak inni
@mk321: a co to za problem wrzucić aplikację w angluarze do resourców i podpiąć npm? robi się tak komercyjnie. ale również

2020

frontend w statycznych resourscach

frontend to się wrzuca na s3 i serwuje cache klientom w zależności od lokalizacji.
via Wykop Mobilny (Android)
  • 1
@PrzegrywWykopek: i komercyjnie robi to się ręcznie? Albo każdy pisze skrypty w bashu, które będą to kopiować? Nie ma jakiego ładnego rozwiązania?

Jak mam front i backend na jednym serwerze, to łatwiej o zabezpieczenia. Wszystkie CORS-y itd. mają być dostępne tylko "od siebie" i z głowy. Jak mam dwie maszyny (np. S3) to już muszę myśleć skąd można strzelić, a skąd nie (i przy zmianie maszyny backendowej zmieniać konfigurację na frontendowej).
@mk321:

i komercyjnie robi to się ręcznie? Albo każdy pisze skrypty w bashu, które będą to kopiować? Nie ma jakiego ładnego rozwiązania?


Gradle i taski, w tym celu został stworzony gradle. Maven to fajne narzędzie, gdy jedyne co potrzebujesz, to zaciągnąć zależności i podpiąć jakiś plugin. W przypadku takiego angularjs nie miałeś jakiś fancy procesów, co najwyżej minifikacja. W Angularze 2 jest już inaczej, bo musisz przepuścić przez translator typescript. Ale
via Wykop Mobilny (Android)
  • 0
@PrzegrywWykopek: nie używam Gradle tylko Maven. Może czas wreszcie się przerzucić. Ale myślałem że na jedno wychodzi (też tylko do pobierania zależności i odpalania pluginów). Tylko Gradle niby szybszy, bo robi równolegle (ale też słyszałem o problemach z szybkością budowania względem Mavena). Były też problemy z Gradle i Javą 11 w Springu. Wychodzi, że Maven jednak nadal stabilniejszy.

Miałem na myśli, że jak mam front i backend w jednym jar, to
nie używam Gradle tylko Maven. Może czas wreszcie się przerzucić. Ale myślałem że na jedno wychodzi (też tylko do pobierania zależności i odpalania pluginów). Tylko Gradle niby szybszy, bo robi równolegle (ale też słyszałem o problemach z szybkością budowania względem Mavena). Były też problemy z Gradle i Javą 11 w Springu. Wychodzi, że Maven jednak nadal stabilniejszy.


@mk321: tutaj chodzi o taski gradle i to co umożliwiają. W skrócie możesz rozszerzyć
@mk321: gradle to zupełnie inna filozofia budowania projektów. Nie ma stałego lifecycle. Aby dorobić logikę, nie trzeba rzeźbić pluginów (ale można). Napisanie taska, który wywoła npm i skopiuje wynik do resourceów to ledwie kilka linijek kodu.
cały czas miałem na myśli cloud front


@PrzegrywWykopek: a czyli oddzielna "usługa" AWS, tak jak pisałem, ze takie CDN (nawet sami tak to opisują na stronie: https://aws.amazon.com/cloudfront/ ).

cache ustawiasz na tomcatcie, czy tam jetty


@PrzegrywWykopek: jak mam Spring Boota to na Tomcat/Jett embedded raczej dużo nie ustawiam. A ten cache w Springu to chyba całkiem co innego niż cache na poziomie sieci.

po czym tak twierdzisz


@Kuriozal: po