it-swarm.com.de

Integration von Tomcat und Eclipse als Hot-Deploy-Umgebung

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

87
udit

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 ).

  • fügen Sie Tomcat der Serverliste hinzu
  • machen Sie das Projekt "dynamisches Webprojekt" (entweder durch den Erstellungsassistenten oder durch den Facettenabschnitt in den Einstellungen)
  • fügen Sie das Projekt zu Tomcat hinzu und konfigurieren Sie seine "Bereitstellungsassembly".
  • doppelklicken Sie in der Liste auf Tomcat, um die Konfigurationen zu öffnen
  • Ändern Sie "Veröffentlichen" in "Nie automatisch veröffentlichen" (dies bedeutet, dass der Server nicht neu gestartet wird, wenn Sie Strg + s drücken.)
  • starten Sie Tomcat im Debug-Modus

Dies wird weiterhin Codeänderungen widerspiegeln, aber den Server nicht neu starten.

Zweitens habe ich das FileSync-Plugin schon lange verwendet:

  • konfigurieren Sie das Plugin so, dass alle Klassen vom Bin Director an WEB-INF/classes Ihrer Tomcat-Installation gesendet werden (dies entspricht fast der Konfiguration der Bereitstellungsassembly).
  • konfigurieren Sie alle anderen Ressourcen so, dass sie zu ihren jeweiligen Standorten gelangen
  • externalisieren Sie optional alle absoluten Pfade von den Filesync-Standorteinstellungen in eine einzige Variable und konfigurieren Sie diese Variable in Eclipse (Sie können also auch die Filesync-Einstellungen festschreiben, wenn alle Mitglieder Eclipse verwenden.)
  • fügen Sie Tomcat der Serverliste in Eclipse hinzu. Konfigurieren Sie die Option "Serverstandorte" auf "Tomcat-Installation verwenden" (der Bildschirm wird geöffnet, wenn Sie in der Serverliste auf Tomcat doppelklicken).
  • starten Sie Tomcat im Debug-Modus

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.

72
Bozho

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.

29
Martin Tilsted

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:

  • Methoden hinzufügen/entfernen
  • Konstruktoren hinzufügen/entfernen
  • Schnittstellen ändern
  • Implementierte Schnittstellen hinzufügen/entfernen

Es ist kommerziell , ( Preisangaben , $ 550/Jahr Stand Juni 2018), und es gibt viele Plugins für Frameworks von Drittanbietern, einschließlich

  • Guice
  • Frühling
  • Streben 2

Sie erhalten eine kostenlose Testversion ganz schmerzlos - ich schlage vor, Sie probieren es aus. 

8
Robert Munteanu

Ä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

3
PaganSensei

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.

3
ticu0000

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.

2
Jared

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 !!!

2
chuckedw

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.

1
Cameron

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.

0
Tushar Sagar

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.

0
Raul Luna

Falls Sie es eilig haben:

  1. aktivieren Sie "Automatisch veröffentlichen" in Tomcat (anderer Container) in Eclipse.
  2. starten Sie Tomcat (anderer Container) im Debug-Modus.

voila! :)

0
Sachin Verma

Das ist vielleicht nicht der beste Weg, aber es funktioniert für mich.

  • $ Tomcat/conf/Catalina/localhost/.xml
  • $ contextPath/webapp/web/WEB-INF/lib/*. jar
  • $ contextPath/webapp/web / 
  • $ eclispeWorkbench/project-servlet/src /
  • $ eclispeWorkbench/project-servlet/servlet.jardesc (sollte jar nach lib dir in $ contextPath exportieren)
  • $ eclipseWorkbench/project-jsp /

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.

0
TJR

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.

0
NLessani

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).

  1. Laden Sie die neueste Version von JAR von Spring Loaded aus ihrem Github-Projekt herunter . Dies wurde mit springloaded-1.2.5.RELEASE.jar getestet.
  2. Richten Sie einen Tomcat-Server wie gewohnt in Eclipse ein (getestet mit Tomcat 8.0.30).
  3. Öffnen Sie die Konfigurationsseite des Tomcat-Servers in Eclipse (doppelklicken Sie auf der Server-Instanz auf der Registerkarte "Server").
  4. Deaktivieren Sie im Abschnitt "Server Options" die Option "Module automatisch neu laden" .
    • Hinweis: Wenn Sie bereits Webmodule zum Server hinzugefügt haben, müssen Sie möglicherweise "Auto Reload" einzeln über die Registerkarte "Module" (unten im Fenster der Konfigurationsseite) deaktivieren.
  5. Klicken Sie im Abschnitt "Allgemeine Informationen" auf "Startkonfiguration öffnen"
    • Fügen Sie auf der Registerkarte "Argumente" Folgendes am Ende der "VM-Argumente" hinzu: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Um zu ermöglichen, dass JARs zusätzlich zu den .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.

0
martian111

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

0
matt b