Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IntelliJ + Tomcat + Spring-Loaded

I would like to try out Spring Source's "Spring Loaded" class reloading agent, with Tomcat run via IntelliJ.

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

I've added the JVM arguments to my Tomcat run configuration, and my webapp starts up without errors and seems to behave normally.

I'm not really sure how to trigger the class reloading though. Do I just need to compile the classes that I modify? I've tried that and that didn't seem to work. Do I need to update Tomcat and deploy classes and resources? That doesn't seem to work either...?

Any specific configuration details would be greatly appreciated.

EDIT: More info, I think my problem may have to do with using two modules, one a core code library, and one the webapp. I use Maven for both, one configured as a jar project and the other as a war project. IntelliJ sets up the Artifact for the exploded war to use the jar module's jar file. I've tried switching the Artifact config to incorporate the jar module's compiled output into WEB-INF/classes instead. Now I see the .class files in target/webapp/WEB-INF/class/etc. But I'm not sure how to get IntelliJ to update a specific class file when I edit it.

like image 366
sdouglass Avatar asked Feb 27 '13 17:02

sdouglass


People also ask

How do I add spring capabilities in IntelliJ?

Enable Spring support in IntelliJ IDEAPress Ctrl+Alt+S to open the IDE settings and select Plugins. Open the Installed tab, search for Spring and make sure that the checkboxes next to all relevant plugins are selected.

How do I run an existing Spring Boot application in IntelliJ?

Run your Spring Boot application and open the Services tool window: select View | Tool Windows | Services or press Alt+8 . Select your running Spring Boot application and open the Actuator tab.


1 Answers

If you added the following jvm parameters (as described at the springloaded page) to your tomcat

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

you should be fine. It may help to disable auto reloading in tomcat for the webapp you are testing. For exmaple in your server.xml:

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

This ensures that only the springloaded classloader loads changed classes.

like image 131
Jens Avatar answered Oct 12 '22 07:10

Jens