IntelliJ e Tomcat ... i file modificati non vengono automaticamente riconosciuti da Tomcat


135

Sto eseguendo Intellij Ultimate con Tomcat e schierando una guerra. Tutto viene distribuito bene nella directory webapp di tomcat.

Quando cambio un file come un file xhtml, c'è un modo per tomcat di prendere automaticamente quella modifica? A partire da ora ho bisogno di copiare il file da Intellij e copiarlo nella directory in cui si trova nella directory dell'app Web Tomcat. So che ci sono alcuni file che dovranno essere ricompilati, ma gli xhtmls non sono uno di questi.

Risposte:


21

Consentitemi di descrivere la sequenza di azioni usando gli screenshot:

  1. Apri la configurazione di esecuzione / debug di Tomcat (Esegui> Modifica configurazioni)

inserisci qui la descrizione dell'immagine

  1. Fai clic sull'icona Aggiungi, seleziona 'artefatto' e quindi seleziona pizza_mvc:war exploded: inserisci qui la descrizione dell'immagine

  2. Modifica "All'azione di aggiornamento" e "Disattivazione su frame": inserisci qui la descrizione dell'immagine

  3. Ogni volta che vuoi aggiornare le tue risorse, premi <Ctrl> + F10


Grazie per avermi ricordato di controllare "Sull'azione 'Aggiorna'"
km1

290

Questo non può essere fatto se si distribuisce una guerra con IntelliJ IDEA. Tuttavia, può essere se si dispiega una guerra esplosa . Nell'IDEA:

  1. apri la configurazione di esecuzione / debug di Tomcat ( Esegui> Modifica configurazioni )
  2. Vai alla scheda "Distribuzione"
  3. Nella sezione "Distribuisci all'avvio del server", rimuovi (se presente) l'artefatto my-webapp-name:war
  4. Fare clic sull'icona Aggiungi, selezionare 'artefatto' e quindi selezionare my-webapp-name:war exploded
  5. Fai clic su OK (nella finestra di dialogo "Seleziona artefatti da distribuire")
  6. Sempre nella finestra Configurazione esecuzione / debug, selezionare la scheda "Server"
  7. Nel mezzo di quella scheda, modifica l'impostazione "Disattivazione su frame" in "Aggiorna risorse" o "Aggiorna classi e risorse"
    • Aggiorna risorse: verranno aggiornate tutte le risorse modificate (ovvero tutti i componenti dell'applicazione diversi dalle classi).
    • Aggiorna classi e risorse: tutte le risorse modificate verranno aggiornate; le classi modificate verranno ricompilate. Si noti che se le classi effettive verranno aggiornate dipende dal server Web delle funzionalità. Se ricordo, Tomcat ricaricherà i file html / xhtml e jsp, ma non i servlet o le classi utilizzati da JSP o servlet. È necessario modificare Tomcat per utilizzare un classloader dinamico per questo.
  8. È anche possibile impostare il " 'update' On " l'azione a quello selezionato sopra pure.
    • Ciò ha determinato cosa succede quando si preme l' Icona di aggiornamentoicona Aggiorna (o Ctrl+ F10) nella finestra Esegui.
    • la "Mostra finestra di dialogo" determina se IDEA ti richiede ogni volta che premi l'icona di aggiornamento
  9. Clicca OK.

Ora, ogni volta che apporti una modifica, IDEA ridistribuisce i file modificati quando il frame IDEA è disattivato (ovvero perde lo stato attivo). Ci vogliono un secondo o due, lo vedrai nella barra di stato in basso in IDEA. Ovviamente. dovrai comunque aggiornare il tuo browser in modo che recuperi il nuovo file (a meno che ovviamente se la pagina abbia un aggiornamento automatico di ajax come fetch).

Una buona combinazione con Tomcat è impostare "Disattivazione su frame" su "Aggiorna risorse" e l'azione "On 'aggiorna" su "Ridistribuzione" o "Riavvia server". Ciò consente alle pagine statiche di essere rapidamente aggiornate tramite la disattivazione dei frame e classe aggiornata tramite l'azione "aggiorna".

Una società di nome ZeroTurnaround vende JRebel che è una soluzione di caricamento di classe dinamica. Hanno anche una serie in cinque parti sull'argomento che è molto buona.


Ho un errore: Error: Artifact 'my-webapp-name:war exploded' has invalid extensioncome risolvere?
Anton Dozortsev,

3
Consiglio vivamente di utilizzare DCEVM per il ricaricamento automatico delle classi. È quindi possibile utilizzare "Aggiorna classi e risorse" per applicare eventuali modifiche al codice sorgente senza ridistribuire l'applicazione. Vedi: blog.jetbrains.com/idea/2013/07/… . Oltre a quanto spiegato in questa esercitazione, è necessario impostare JAVA_HOME nella scheda Setup / Connessione - Debug di Tomcat Run Configuration in modo che punti al JRE di DCEVM.
Alex Fedulov,

1
@yaroslavprokipchyn - Non ho familiarità con JBoss e con qualsiasi requisito "speciale" che potrebbe avere. Ma per quanto ne so, dovrebbe funzionare allo stesso modo. Per tomcat, IDEA crea una configurazione Tomcat (context.xml) che dice a Tomcat di utilizzare la directory target / {contextName} come directory root di webapp. Potresti voler consultare la guida per informazioni specifiche su JBOss.
Javaru,

3
Nel passaggio 7, non otterrai (almeno in Intellij 14) le scelte a discesa appropriate a meno che tu non abbia caricato tutti i tuoi artefatti come "esplosi".
mortensi

1
@ChiefTwoPencils - Il passaggio 5 fa clic su OK nella finestra di dialogo "Seleziona artefatti da distribuire" (per cui non è presente "applica"), non nella finestra di configurazione Esegui / Debug. Ho aggiunto una dichiarazione di chiarimento al passaggio 5.
Javaru,

12

Se desideri aggiornare classi e risorse, esegui Tomcat in modalità Debug . In questa modalità IntelliJ aggiorna le classi e le risorse senza problemi (hot swap).

Ho lo stesso problema. IntelliJ non ha aggiornato il mio progetto, perché corro come "Modalità di esecuzione". Quando corro in modalità debug e premo Ctrl+ F10, aggiorna classi e risorse.


Control-F10 ha risolto il problema per me. Grazie!
Jeffrey Getzin,

3

Ho trovato un modo migliore.

In Eclipse abbiamo automaticamente compilare, compilare + ricaricare file statici. I file effettivamente statici vengono serviti direttamente da src / main / webapp .

In IntelliJ invece di servire direttamente da src / main / webapp , c'è una cartella creata nella destinazione, in cui avrai una copia di src / main / webapp e anche altri contesti correlati. Web-inf / classes / lib.

Se al posto dell'obiettivo viene generato l'output di artefatto esploso su src / main / webapp , non sovrascriverà i file di origine e servirà direttamente, non dovrai colpire - aggiorna risorse / aggiorna risorse e classi

Quindi quello che devi fare in IntelliJ è

  1. modifica la directory di output degli artefatti esplosi in src / main / webapp inserisci qui la descrizione dell'immagine
  2. crea una macro per salvare e ricompilare / compilare classi sporche (cmd + maiusc + f9) inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine
  3. modifica il registro e le preferenze per compilare automaticamente e compilare mentre l'app è in esecuzione (cmd + maiusc + a - registro). inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Dopodiché, se hai lavori che cambiano file statici dall'esterno di IntelliJ, vedrai immediatamente le modifiche senza andare a IntelliJ e risorse di aggiornamento , e per le classi hai quella macro che salva e compila (Nota: potresti anche premere Compile / Ricompila: cmd + maiusc + F9 / cmd + F9 - se hai più editor aperti vedrai che i tuoi editor sporchi * non saranno sporchi e le modifiche (classi) verranno ricaricate)


Sembra che se hai il registro compilatore.automake .. abilitato, spinge le tue modifiche anche solo premendo Salva.
Radu Toader,

0

Ciò è possibile solo quando si distribuisce la cartella di guerra esplosa, si abilita la ricarica a caldo e si avvia tomcat in modalità debug.

Questi sono i passaggi per raggiungere questo obiettivo.

  1. apri la configurazione di esecuzione / debug di Tomcat (Esegui> Modifica configurazioni)
  2. Vai alla scheda "Distribuzione" 3. Nella sezione "Distribuisci all'avvio del server", rimuovi (se presente) l'artefatto my-webapp-name: war
  3. Fai clic sull'icona Aggiungi, seleziona 'artefatto' e quindi seleziona my-webapp-name: war exploded
  4. Fai clic su OK (nella finestra di dialogo "Seleziona artefatti da distribuire")
  5. Sempre nella finestra Configurazione esecuzione / debug, selezionare la scheda "Server"
  6. Modifica le impostazioni "Disattivazione su frame" e "Azione di aggiornamento" su "Aggiorna classi e risorse"
  7. Applicare e salvare
  8. Vai alle normali impostazioni dei progetti facendo clic su File, quindi su Impostazioni o premendo CTRL + ALT + S
  9. vai a "Build, Execution, Deployment"
  10. Compiler
  11. Seleziona Crea progetto automaticamente
  12. Salva
  13. Avviare tomcat in modalità debug

0

se si dispone di più file che si desidera visualizzare / riprodurre immediatamente, caricare direttamente nella cartella di destinazione. * (cambia solo la posizione di scrittura nella cartella di destinazione / static /)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

sarai in grado di visualizzare immediatamente il tuo file senza dover riavviare l'IDE

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.