Domanda

Voglio essere in grado di distribuire le modifiche al codice su Tomcat (quasi istantaneamente), mentre sto sviluppando in Eclipse.

Finora, ho il mio output da Eclipse inserendo le classi create nel file WEB-INF/classes cartella della mia applicazione web.

Ho anche un contesto ricaricabile, con il file web.xml come risorsa osservata.Qualsiasi modifica/salvataggio in questo file fa ricarica la mia app web, impiegando poco più di un secondo, molto più velocemente che creare un nuovo file di guerra e distribuirlo per intero.

Tuttavia, ciò che vorrei fare è attivare la ridistribuzione quando modifico qualsiasi file sorgente.Poiché i file .class vengono modificati in Tomcat, sembra che sia sufficiente monitorare eventuali modifiche nel file WEB-INF/classes cartella ed è figli.

Ho letto che posso aggiungere ulteriori risorse guardate in Tomcat context.xml ma questo non sembra essere proprio ciò di cui ho bisogno, a meno che non sia possibile specificare una directory che verrà controllata (incluso il monitoraggio ricorsivo di sottocartelle e file)?

<Context>
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <WatchedResource>WEB-INF/someother.file</WatchedResource>
  <Manager pathname=""/>
</Context>

Quindi, in sostanza, la mia domanda è: posso guardare l'intera cartella delle classi (senza includerle ciascuna WatchedResource esplicitamente) per attivare una ridistribuzione in Tomcat?

In caso contrario, posso configurare Eclipse su touch il file web.xml, ogni volta che salvo un file sorgente in quel progetto?Sto sviluppando su un sistema Windows.:(


PS Non sono interessato al prodotto JRebel.Qualsiasi risposta dovrebbe essere a gratuito soluzione.


Aggiornamento

Secondo Tomcat documentazione, la cartella delle classi deve essere monitorata impostando il contesto su ricaricabile:

Imposta su True se si desidera che Catalina monitora le classi in/Web-Inf/Classes/e/Web-Inf/Lib per le modifiche e ricarica automaticamente l'applicazione Web se viene rilevata una modifica.

Solo le modifiche al web.xml sembrano attivare una ricarica.E' un bug o la mia configurazione non è corretta?

Inoltre, ho letto sull'impostazione di docBase attributo per un dato contesto:

docBase="webapps/someExample"

Sembra essere vicino a ciò di cui ho bisogno, poiché potrei quindi ripubblicare rapidamente in Eclipse.Il mio unico problema è che ho bisogno che diverse app Web/servlet siano in esecuzione contemporaneamente in Tomcat, sulla stessa porta, ecc.

È stato utile?

Soluzione

Per questi casi ho impostato l'output di build Eclipse su Web-INF/Classi come hai fatto e creo un file di contesto con il set di DOCBase sulla cartella WebApp (genitore di Web-INF) nel progetto. Questo è inserito manualmente in conf/catalina/localhost (supponendo configurazioni predefinite per alcuni elementi di server.xml). Il risultato finale è che Tomcat finisce per servire dalla directory di sviluppo. Quindi, cambia un servlet o altra classe e viene aggiornato nella cartella delle classi. Salva un JSP ed è immediatamente disponibile.

Se progetto strutturato come:

src
|-main
  |-webapp
    |-images
    |-js
    |-WEB-INF
      |-jsp
      |-classes

Allora il contesto sarebbe come:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/path" reloadable="true" 
    docBase="<pathtoproject>/src/main/webapp" />

Altri suggerimenti

Forse il progetto Web Tools di Eclipse con Auto-Redeploy abilitato ti aiuterà? Aggiungi un server, apri le proprietà e nella pubblicazione vedrai un radiobutton che dice "pubblicare automaticamente quando le risorse cambiano". Ciò comporterà un ridistribuzione se le classi cambia altrimenti altrimenti sovrascrive le risorse. È possibile installare WTP tramite un sito di aggiornamento integrato (solo Eclipse), quindi controlla gli aggiornamenti del software. È gratuito per la maggior parte dei server ma non supporta alcune funzionalità WebSphere?

Prova l'agente JVM Spring Loaded che ho descritto nella seguente risposta:https://stackoverflow.com/a/37064672/1034436

Sebbene abbia funzionato per la mia applicazione Web Spring, dovrebbe funzionare con Vanilla Eclipse + WTP + Tomcat + Applicazioni Web dinamiche poiché Spring Loaded funziona a livello JVM/caricamento classi.

Dovrai comunque utilizzare la funzione "Pubblica automaticamente quando le risorse cambiano" come menzionato da @toomasr nella sua risposta. Tuttavia, devi anche disabilitare l'opzione "Ricaricamento automatico del modulo per impostazione predefinita".Se hai già aggiunto/pubblicato moduli da Eclipse a Tomcat, disabilita "Ricaricamento automatico" per ciascun modulo Web (tramite la scheda Moduli della pagina di configurazione Tomcat).Ciò dovrebbe impedire a Tomcat di ricaricare l'applicazione quando viene aggiornato un singolo file di classe, che sospetto sia tutto quel tempo di ricarica/attesa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top