Ich möchte Eclipse und Tomcat so einrichten, dass Änderungen an meinen JSPs und Servlets (wenn möglich) sofort ohne Bereitstellung von Änderungen reflektiert werden.
Ok, dies ist eine dieser Fragen, die im Internet viele Antworten gibt, die aber alle unterschiedlich aussehen. (Verwenden Sie das Sysdeo-Plugin, verwenden Sie das JBOss-Plugin, erledigen Sie etwas mit einem veralteten Eclipse, verwenden Sie stattdessen MyEclipse usw.) und ich konnte keine endgültige Ressource finden, auf die Sie sich beziehen können. Was ist für mich das einfachste und am meisten empfohlene Verfahren, um dies einzurichten?
Dies setzt voraus, dass Eclipse und Tomcat unabhängig voneinander ausgeführt werden. Ich habe es tatsächlich geschafft, sie in einer nicht-heißen Bereitstellungsweise zu integrieren, indem Anweisungen hier verwendet werden: http://www.ibm.com/developerworks/opensource/library/os-Eclipse-Tomcat/index.html
Eclipse-Version Version: 3.4.2 (Ganymede) Tomcat v6.0.20
Es gibt zwei Möglichkeiten.
Erstens können Sie dies mit Eclipse tun, mit einer geringfügigen Änderung der Konfiguration (siehe auch diese detaillierte Post ).
Dies wird weiterhin Codeänderungen widerspiegeln, aber den Server nicht neu starten.
Zweitens habe ich das FileSync-Plugin schon lange verwendet:
WEB-INF/classes
Ihrer Tomcat-Installation gesendet werden (dies entspricht fast der Konfiguration der Bereitstellungsassembly).So funktioniert es perfekt für mich. Jede nichtstrukturelle Änderung wird sofort reflektiert, ohne sie neu zu implementieren.
Update:
Weitere Informationen zu den Methoden für das Hot-Deployment finden Sie hier .
Ich habe auch ein Projekt erstellt , das den Arbeitsbereich leicht mit dem Servlet-Container synchronisiert.
Lassen Sie Eclipse die Klassendateien direkt in das Verzeichnis $ Tomcat/webapps/MyWebApp/WEB_INF/classes schreiben. Konfigurieren Sie dann Apache-Tomcat, um zu überprüfen, ob die Klassendateien aktualisiert wurden, und laden Sie sie erneut, falls sie vorhanden sind.
Um Tomcat so zu konfigurieren, dass eine Klasse bei Änderungen automatisch neu geladen wird, müssen Sie dies tun
$Tomcat/conf/context.xml
bearbeiten und einstellen:
<Context reloadable="true">
Sie müssen möglicherweise auch Ihre webapps/$YourWebApp/web.xml
-Datei bearbeiten und neu laden und Folgendes enthalten:
<web-app reloadable="true">
Ich kann mich nicht erinnern, ob beide Änderungen erforderlich sind, aber so habe ich Tomcat-6.0.18 so konfiguriert, dass er automatisch neu geladen wird.
Disclaimer: Ich bin nur ein glücklicher Kunde, ich arbeite nicht für Zero Turnaround und bin in keiner Weise mit ihnen verbunden.
Check out JRebel - ermöglicht das Codieren ohne Neustart der Webanwendung. Es funktioniert im Wesentlichen, indem Sie Ihre Klassen instrumentieren und ihre Änderungen anpassen. Es verarbeitet viel mehr Fälle als Hot Deploy , einschließlich:
Es ist kommerziell , ( Preisangaben , $ 550/Jahr Stand Juni 2018), und es gibt viele Plugins für Frameworks von Drittanbietern, einschließlich
Sie erhalten eine kostenlose Testversion ganz schmerzlos - ich schlage vor, Sie probieren es aus.
Ändern Sie Ihren Arbeitsbereich in Eclipse in\Tomcat\webapps Da dies nur für Ihre Arbeit gilt, sollte dies problemlos funktionieren. Alle Änderungen, die Sie in Eclipse vornehmen, befinden sich in demselben Verzeichnis, in dem Tomcat nach Anwendungen sucht, die bereitgestellt werden sollen
Erstellen Sie in der Serveransicht einen neuen Server, fügen Sie dem Server noch keine Ressource (Projekt) hinzu. Doppelklicken Sie auf den Server am Serverstandort. Wählen Sie "Tomcat-Installation verwenden" aus. Bereitstellungspfad "zum Tomcat-Bereitstellungsverzeichnis (Ex: c:\server\Tomcat 7.0.14\webapps) . Erweitern Sie den Abschnitt" Veröffentlichen ". Aktivieren Sie" Automatisch nach einem Build-Ereignis veröffentlichen ". Speichern Klicken Sie im Eclipse-Menü auf "Projekt -> Automatisch erstellen" . Klicken Sie in der Serveransicht mit der rechten Maustaste auf den Server, "Hinzufügen und Entfernen", und veröffentlichen Sie Ihr Projekt.
Warum nicht einen integrierten Tomcat-Server mit in Eclipse verwenden, wenn dies nur für die Entwicklung vorgesehen ist? Sie können Server unter Fenster-> Einstellungen konfigurieren. Nach der Konfiguration können Sie mit einem jsp mit dem Namen page.jsp mit der rechten Maustaste darauf klicken und auf Server ausführen auswählen. Unter Einstellungen-> Allgemein-> Webbrowser können Sie das Wetter auswählen, um den eingebauten Browser oder einen externen Browser zu verwenden. Nehmen Sie einige Änderungen an Ihrem JSP vor, speichern Sie Ihre Seite und aktualisieren Sie sie im Browser. Die Änderungen werden automatisch übernommen, sobald Sie Ihren Browser speichern und aktualisieren.
Was für mich hier funktioniert, ist:
context.xml wie folgt:
<Context path="/myapp" docBase="myapp" debug="5"
reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
<Loader loaderClass="org.springframework.instrument.classloading.Tomcat.TomcatInstrumentableClassLoader" />
</Context>
Dann habe ich auf der Registerkarte Server in Eclipse auf der Registerkarte "Module" das "Auto Reload" für alle bereitgestellten Module deaktiviert.
Lassen Sie die Standardkonfiguration auch die automatische Veröffentlichung zulassen.
Wenn Sie Maven mit WTP verwenden, vergessen Sie nicht, den Inhalt von src/main/resources zu belassen, da Eclipse darauf besteht, den Inhalt dieses Ordners vom endgültigen Build auszuschließen.
Nur bei all dem habe ich volle (VM-) Klassen mit Hot-Deploy-Ressourcen und Hot-Deploy erhalten !!!
Verweisen Sie in Ihrer Entwicklungsumgebung einfach, dass Ihr Tomcat-Server nach JSPs in dem Verzeichnis sucht, in dem Sie sie entwickeln. Sobald Sie die Datei speichern, können Sie die Änderungen sehen.
können Sie die folgende Option verwenden? Doppelklicken Sie auf Server in Eclipse -> Serverstandorte -> Tomcat-Installation verwenden . Sie übernimmt die Kontrolle über die Tomcat-Installation . Sie müssen den Server für Änderungen nicht neu starten Java-Klassen.
Ich habe einen einfachsten Weg gefunden: Verwendung symbolischer Links: Ich denke, das ist der schnellste Weg, weil es überhaupt keine Synchronisation gibt: Tomcat-Verzeichnis und Ihr Projektverzeichnis wird immer das gleiche Verzeichnis sein.
Tomcat erkennt regelmäßig die Änderungen und stellt Ihre Anwendung erneut bereit.
Es gibt auch eine Möglichkeit, Ihre Anwendung zu debuggen, daher denke ich demütig, dass dies eine gute Lösung ist.
Ich habe meine Lösung hier für jeden Interessierten dokumentiert.
Falls Sie es eilig haben:
voila! :)
Das ist vielleicht nicht der beste Weg, aber es funktioniert für mich.
Ich verwende einen rsync-Befehl, um Änderungen von meinem Jsp-Projekt in den $ contextPath zu synchronisieren.
Verwenden Sie das Remote-Debugging in Eclipse für Tomcat, wodurch ein eingeschränkter Hot-Swapping-Code ermöglicht wird. Wenn Sie statische Felder ändern oder Methoden hinzufügen, müssen Sie den Jar exportieren und den Kontext neu starten.
Klicken Sie in Eclipse auf das Projekt im oberen Menü und stellen Sie sicher, dass "Automatisch erstellen" ausgewählt ist. Dies hat mein Problem behoben. Ich habe Eclipse mit Tomcat mit meinen Workspace-Metadaten ausgeführt. Ich habe auch Maven in einem Dynamic Web Module-Projekt ausgeführt. Um dies zu überprüfen, fügen Sie Ihre Anwendung zu Tomcat hinzu. Starten Sie Tomcat aus Eclipse heraus. Stellen Sie sicher, dass Ihre Anwendung implementiert ist und ausgeführt wird. Öffnen Sie die Registerkarte "Konsole" in Eclipse. Nehmen Sie eine Änderung in Ihrer Anwendung vor. Nach einigen Sekunden sollte Ihre Änderung automatisch erstellt und in Tomcat bereitgestellt werden.
Ich habe es geschafft, dies in meiner Entwicklungsumgebung mit dem Spring Loaded JVM-Agenten zum Laufen zu bringen. Während ich Spring-Webanwendungen entwickle, weist die Beschreibung dieses Projekts darauf hin, dass dies der Fall ist
verwendbar für jeden Bytecode, der möglicherweise auf einer JVM ausgeführt wird
Mit dem folgenden Setup konnte ich Änderungen zur automatischen Veröffentlichung in einer angehängten Tomcat-Instanz (der üblichen Eclipse-WTP-Methode) abrufen. Ich verwende Spring Tool Suite 3.7.3 basierend auf Eclipse Mars.2 (4.5.2).
-javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
.class
-Dateien des Projekts überwacht werden, konfigurieren Sie das Argument -Dspringloaded=watchJars=
VM per den Kommentaren dieses Problems .Starten Sie den Server und veröffentlichen Sie wie gewohnt Dynamic Web Application-Projekte. Wieder konnte ich dies mit Spring-Webanwendungen testen. Das Ändern von Code, Hinzufügen/Subtrahieren von Methoden usw. in @Controller-Klassen wurde beispielsweise fast sofort angewendet, nachdem ich die Datei und die Eclipse-Builds gespeichert und die geänderte Klasse veröffentlicht habe. Schließlich hat der Abschnitt FAQ des Spring Loaded-Projekts einige Fälle angesprochen, in denen die Dinge nicht erneut geladen werden. In diesem Fall ist ein Neustart des Servers/der Anwendung erforderlich. Diese Ausnahmen sind jedoch viel seltener.
Noch ein Hinweis: Dies funktioniert NICHT mit dem eingebetteten Pivotal tc Server oder VMware vFabric tc Server, die mit STS geliefert werden. Für diese Server gibt es die Option "Java Agent-basiertes Neuladen (experimentell) aktivieren", die jedoch die ältere Version 1.2.0 von Spring Loaded verwendet, die bei mir nicht funktionierte.
Sind Sie offen für die Verwendung von Jetty zu Entwicklungszwecken?
Wenn ja, ist es ziemlich einfach mit Maven zu arbeiten - führe einfach mvn jetty:run
aus