2013-02-27 5 views
12

Ich möchte Spring Source "Spring Loaded" Klassenladeprogramm ausprobieren, mit Tomcat über IntelliJ laufen.IntelliJ + Tomcat + Spring-Loaded

https://github.com/SpringSource/spring-loaded

ich die JVM-Argumente auf meine Tomcat laufen Konfiguration hinzugefügt haben, und meine Webapp startet ohne Fehler und normal zu verhalten scheint.

Ich bin nicht wirklich sicher, wie das Klassenumladen auszulösen ist. Muss ich nur die Klassen kompilieren, die ich modifiziere? Ich habe das versucht und das schien nicht zu funktionieren. Muss ich Tomcat aktualisieren und Klassen und Ressourcen bereitstellen? Das scheint auch nicht zu funktionieren ...?

Alle spezifischen Konfigurationsdetails würden sehr geschätzt werden.

EDIT: Weitere Informationen, ich denke, mein Problem kann mit der Verwendung von zwei Modulen zu tun haben, eine eine Code-Bibliothek, und eine der Webapp. Ich benutze Maven für beide, einen als Jar-Projekt und den anderen als Kriegsprojekt. IntelliJ richtet das Artefakt für den explodierten Krieg ein, um die JAR-Datei des JAR-Moduls zu verwenden. Ich habe versucht, die Artefakt-Konfiguration zu wechseln, um die kompilierte Ausgabe des JAR-Moduls stattdessen in WEB-INF/Klassen zu integrieren. Jetzt sehe ich die .class-Dateien in target/webapp/WEB-INF/class/etc. Aber ich bin mir nicht sicher, wie ich IntelliJ dazu bringen kann, eine bestimmte Klassendatei zu aktualisieren, wenn ich sie bearbeite.

+0

Hast dich darauf, einen Ausweg aus der Submodule mit Feder zu behandeln? – Damien

+0

Noch nicht. Ich habe lange nicht mehr daran gearbeitet. – sdouglass

Antwort

5

Wenn Sie die folgenden JVM-Parameter hinzugefügt (wie bei der gefederten Seite beschrieben), um Ihre tomcat

-javaagent:<pathTo>/springloaded-{VERSION}.jar -noverify SomeJavaClass 

Sie sollten in Ordnung sein. Es kann helfen, das automatische Nachladen in Tomcat für die Webanwendung, die Sie testen, zu deaktivieren. Für exmaple in Ihrer server.xml:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> 
    <Context docBase="projekt" path="/projekt" reloadable="false" ... 

Dies stellt sicher, dass nur die gefederte Klassenlader lädt Klassen geändert.

+0

Danke für Ihre Antwort. Was veranlasst den gefederten Klassenlader, geänderte Klassen neu zu laden? Passiert es nur periodisch? Überwacht es die Klassendateien für Änderungen des Zeitstempels? Oder muss ich eine Aktion in IntelliJ ausführen, um sie auszulösen? – sdouglass

+0

Laut https://github.com/spring-projects/spring-loaded werden Klassendateien einmal pro Sekunde auf Änderungen überprüft. – varad

+0

Entschuldigung, aber wie haben Sie das mit IntelliJ geändert? Ich meine, das ist unmöglich mit IntelliJ zu ändern, weil Sie keine Sichtbarkeit der "server.xml" haben, oder? –