2017-01-11 11 views
16

Mam problem z używaniem jsp w instancjach Spring Boot/Tomcat. Zasadniczo mam wszystkie pliki jsp w module A (A/src/main/resources/META-INF/resources/jsp), a moduł ten jest zawarty w module B (moduł główny, opakowanie wojenne) jako zależność między jarami. Problem polega na tym, że gdy aplikacja działa w trybie debugowania (w Eclipse lub w IntelliJ Idea), żaden z plików jsp znajdujących się w module A nie jest automatycznie ładowany (zmiany w pliku nie są widoczne na renderowanej stronie), tylko restart z tomcat faktycznie przeładowuje pliki i pokazuje zmiany. Przesłonięte pliki jsp w Module B są ponownie ładowane, tylko pliki jsp w Module A mają problemy (prawdopodobnie z powodu folderu META-INF/resources).Przeładowanie Tomcat/Spring boot META-INF/resources/pliki jsp (aktualizacje na żywo)

Moduł struktura (zależność, zapakowane w słoiku). src/main/środki/meta-INF/środki/JP/* JP

struktura

Moduł B (moduł główny, opakowane wojny JSP w tu zastąpić te, moduł a): src/main/webapp/JSP/* JSP

Szukałem rozwiązania tego, ale najbliżej doszedłem do odpowiedzi było to (przy użyciu JRebel). https://zeroturnaround.com/forums/topic/jsps-in-servlet-3-0-jars-are-not-reloading/

Jest to również przykład tego, jak skonfigurować jsp: https://github.com/ghillert/spring-boot-jsp-demo

+0

Czy próbowałeś wyczyścić folder roboczy tomcat? w teorii można zmusić IDE do wykonania zadania przy zapisie, więc na przykład w katalogu '.jsp' zapisz czyść/usuń katalog roboczy. – Babl

+0

Tak, wciąż nie ma szczęścia. – n00b

+0

Zobacz https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html Wygląda na to, że możesz całkowicie wyłączyć pamięć podręczną zasobów. – Babl

Odpowiedz

4

Nie wiem, czy pasuje swoje ograniczenia, ale nie jest to rozwiązanie jak to tam: https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3

Inna opcja: https://github.com/spring-projects/spring-loaded

używam JSF i Facelets i ciepłej reload jest zawsze trochę problematyczne dla technologii internetowych, które mają renderowanie dynamiczne. Tak więc moją propozycją oprócz wiosenno-bootowych devtools będzie oddzielenie procesu tworzenia statycznych treści od renderowania powiązanych procesów. Jeśli potrzebujesz tylko szybkiego przeładowania dla edycji css, html, js, to większość technologii pomoże ci, ale renderowanie odnośnej edycji komponentów poprosi Cię o ponowne zbudowanie aplikacji od czasu do czasu. Jak często będą cię pytać, zależy to od jakości narzędzia, z którego będziesz korzystać.

+0

Potrzebuję hot reload dla wszystkich plików (js, css, jsf) i js/css, tylko pliki jsf wewnątrz słoika (src/main/resources/META-INF/resources/jsp/* mają problemy. pliki jsf znajdowałyby się w głównym projekcie (tym, który uruchamiam z wiosennym uruchomieniem, a nie w zależnym słoiku) w folderze WEB-INF, działa, po prostu nie z folderu META-INF wewnątrz zależnego słoika. – n00b

+0

czy wyglądałeś na spring-boot-devtools? –

+0

Tak, devtools nie przeładowują tych plików – n00b

4

Jest wysoce prawdopodobne, tak samo jak: https://stackoverflow.com/a/8656527/696632

Wszystkie zasoby w ścieżce klasy podlegają pamięci podręcznej. Powinieneś ocenić odpowiedź.

+0

To nie jest to samo, ale bardzo bliskie moja odpowiedź. Mogę spróbować wyczyścić t on zasugerował w tej odpowiedzi, czy rzeczywiście przeładuje pliki. – n00b

1

Opcją może być użycie Gradle Cargo Plugin lub Maven Cargo plugin w celu ponownego wdrożenia plików na serwerze Tomcat (wszystkie pliki można ponownie wdrożyć, w tym pliki zasobów).

Przeładowywanie plików nie jest automatyczne. Musisz ręcznie uruchomić odpowiednie zadanie/cel, CargoRedeployLocal lub cargo: redeploy dla wersji Gradle i Maven.

Jeśli jednak ponowne uruchomienie wszystkiego zajmuje dużo czasu, ponowne uruchomienie za pomocą wtyczki Cargo może przyspieszyć działanie.