IntelliJ i Tomcat ... zmienione pliki nie są automatycznie rozpoznawane przez Tomcat

Prowadzę Intellij Ultimate z Tomcatem i rozpętuję wojnę. Wszystko działa dobrze do katalogu webapp tomcat.

Kiedy zmieniam plik, taki jak plik xhtml, czy istnieje sposób, aby tomcat automatycznie odebrał tę zmianę? W tej chwili muszę skopiować plik z intellij i skopiować go do katalogu, w którym mieszka w katalogu Tomcat webapp. Wiem, że są pewne pliki, które będą wymagały przekompilowania, ale xhtml nie jest jednym z nich.

Author: Peter, 2013-10-25

4 answers

Nie da się tego zrobić, jeśli rozpętasz wojnę z ideą IntelliJ. Jednak Może Być, jeśli rozpętasz wybuch wojny. W idei:

  1. otwórz konfigurację uruchamiania/debugowania Tomcat (Uruchom > Edytuj konfiguracje )
  2. przejdź do zakładki" wdrożenie "
  3. w sekcji "Wdrażanie przy starcie serwera" usuń (jeśli jest) artefakt my-webapp-name:war
  4. Kliknij ikonę Dodaj, wybierz "artefakt", a następnie wybierz my-webapp-name:war exploded
  5. Kliknij OK (na "Wybierz artefakty do Deploy " dialog)
  6. nadal w oknie konfiguracyjnym Uruchom/Debug wybierz zakładkę "Serwer"
  7. w środku tej karty Zmień ustawienie "Dezaktywacja w ramce" na "Update resources" lub " Update Classes and Resources"
    • Update resources: wszystkie zmienione zasoby (czyli wszystkie komponenty aplikacji inne niż klasy) zostaną zaktualizowane.
    • klasy aktualizacji: i zasoby. Wszystkie zmienione zasoby zostaną zaktualizowane; zmienione klasy będą przekompilować. Zauważ, że to, czy rzeczywiste klasy będą aktualizowane, zależy od możliwości serwera www. Jeśli dobrze pamiętam, Tomcat przeładuje pliki html / xhtml i jsp, ale nie serwlety ani klasy, których używają JSP lub Servlety. Musisz zmodyfikować Tomcat, aby użyć do tego dynamicznego classloadera.
  8. Możesz również ustawić akcję " na 'update'.
    • to określa, co się stanie, gdy naciśniesz ikonę aktualizacji Ikona aktualizacji (lub Ctrl+F10 ) W biegu okno.
    • "Pokaż okno dialogowe" określa, czy aplikacja IDEA wyświetla monit za każdym razem, gdy naciśniesz ikonę aktualizacji
  9. Kliknij OK.

Teraz za każdym razem, gdy dokonasz zmiany, IDEA przekaże zmienione pliki, gdy ramka IDEA zostanie wyłączona (tzn. utraci ostrość). To zajmuje sekundę lub dwie, zobaczysz go na dolnym pasku stanu w IDEA. Oczywiście. nadal będziesz musiał odświeżyć przeglądarkę internetową, aby pobierała nowy plik (chyba że strona ma automatyczne odświeżanie ajax jak aport).

Dobrym połączeniem z Tomcat jest ustawienie "On frame deaktywation" na "Update Resources", a "On 'update" na "Reeploy"lub" Restart Server". Dzięki temu statyczne strony mogą być szybko aktualizowane poprzez dezaktywację ramki, A Klasa aktualizowana za pomocą akcji 'update'.

Firma o nazwie ZeroTurnaround sprzedaje JRebel , który jest dynamicznym rozwiązaniem classloader. Mają również pięć części serii na ten temat to jest bardzo dobre.

 252
Author: Javaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 15:24:25

Pozwolę sobie opisać sekwencję działań za pomocą zrzutów ekranu:

  1. otwórz konfigurację uruchamiania/debugowania Tomcat (Uruchom > Edytuj konfiguracje)

Tutaj wpisz opis obrazka

  1. Kliknij ikonę Dodaj, wybierz "artefakt", a następnie wybierz pizza_mvc:war exploded: Tutaj wpisz opis obrazka

  2. Modify 'on update action' and 'On frame diactivation': Tutaj wpisz opis obrazka

  3. Za każdym razem, gdy chcesz odświeżyć swoje zasoby, naciśnij <Ctrl> + F10

 15
Author: Lord Nighton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-20 12:15:16

Jeśli chcesz zaktualizować klasy i zasoby, uruchom Tomcat w trybie debugowania . W tym trybie IntelliJ aktualizuje klasy i zasoby bez problemu (hot swap).

Mam ten sam problem. IntelliJ nie zaktualizował mojego projektu, ponieważ działam jako "Run mode". Kiedy uruchamiam w trybie debugowania i naciskam <kbd>Ctrl</kbd>+<kbd>F10</kbd>, aktualizuje klasy i zasoby.
 9
Author: Łukasz Woźniak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 09:09:26

Znalazłem lepszy sposób.

W Eclipse Mamy automatycznie budować, kompilować + przeładowywać pliki statyczne. W rzeczywistości pliki statyczne są serwowane bezpośrednio z src / main / webapp .

W IntelliJ zamiast obsługiwać bezpośrednio z src/main/webapp, istnieje folder utworzony w target, w którym będziesz mieć kopię swojego src/main/webapp, a także inne związane z kontekstem .. web-INF / classes / lib.

Jeśli zamiast celu umieścisz wyjście eksplodowanego artefaktu do src / main / webapp, nie nadpisze Ci plików źródłowych i będzie służyć bezpośrednio, nie będziesz musiał trafić - update resources / update resources and classes

Więc to co musisz zrobić w IntelliJ to

  1. zmodyfikuj katalog wyjściowy exploded artifact na src / main / webapp Tutaj wpisz opis obrazka
  2. stwórz makro dla save i przekompiluj / skompiluj brudne klasy (cmd+shift + f9) Tutaj wpisz opis obrazka Tutaj wpisz opis obrazka
  3. edytuj rejestr i preferencje, aby budować automatycznie i budować podczas pracy aplikacji (cmd+shift+a - rejestr). Tutaj wpisz opis obrazka Tutaj wpisz opis obrazka

Po tym, jeśli masz zadania, które zmieniają pliki statyczne spoza IntelliJ, zobaczysz zmiany od razu bez przechodzenia do IntelliJ i aktualizacji zasobów, A dla klas masz to makro, które zapisuje i kompiluje(Uwaga: Możesz również nacisnąć Compile / Recompile: cmd + shift + F9 / cmd + F9-jeśli masz kilka otwartych edytorów, zobaczysz, że twoje brudne edytory * nie będą brudne, a zmiany (klasy) zostaną przeładowane)

 1
Author: Radu Toader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-15 18:36:52