How to configure hot deploy in Eclipse

eclipse-luna

In this tutorial, we will show you how to configure Eclipse debugger to support hot deploy, hot swap or hot code replace without restarting the Server, this speed development a lot.

Environment :

  1. Eclipse 4.4 (Supported in older version as well)
  2. Eclipse Tomcat Plugin

1. Hot deploy example

Review a simple hot deploy example, code changes without restarting the Tomcat plugin. Assume a simple Spring MVC web project is deployed via the Eclipse-Tomcat plugin :

1.1 Original code

TaskController.class

@Controller
public class TaskController {

	@RequestMapping(value = "/task", method = RequestMethod.GET)
	public ModelAndView index() {

		logger.debug("index()");

		ModelAndView model = new ModelAndView();
		model.setViewName("index");
		return model;

	}

Access : http://localhost:8080/project/task


//output
DEBUG c.m.o.web.controller.TaskController - index()

1.2 Change the code, logs something else

TaskController.class

@Controller
public class TaskController {

	@RequestMapping(value = "/task", method = RequestMethod.GET)
	public ModelAndView index() {

		logger.debug("index() - NEW - NO RESTART");

		ModelAndView model = new ModelAndView();
		model.setViewName("index");
		return model;

	}

Access again : http://localhost:8080/project/task


//output
DEBUG c.m.o.web.controller.TaskController - index() - NEW - NO RESTART

2. Configure Hot deploy in Eclipse

Some steps are required to make Eclipse supports hot deploy.

2.1 Double clicks on the Tomcat plugin, refer to publishing tab, make sure Automatically publish when resources change is selected. This should be the default option, to support “hot deploy” resources, for example : JSP, XML and properties files.

eclipse-tomcat-hot-example1
eclipse-tomcat-hot-deploy-example2

2.2 In the Tomcat Plugin page, clicks on the Module view, make sure Auto Reload is Disabled. Default is enabled.

eclipse-tomcat-hot-deploy-example3
Note
This is an important step, failed to set the auto reload to disabled, the Tomcat server will be restarted every time you modified something!

2.3 Start Project in DEBUG mode. Hot Deploy is supported in DEBUG mode only.

Done.

3. Limitation

Hot deploy has supported the code changes in the method implementation only. If you add a new class or a new method, restart is still required.

To simulate it, try to add a new method, following pop up screen will be displayed, saying the code changes cannot be hot swapped in the JVM.

eclipse-hot-swap-failed

References

  1. Intellij IDEA – Auto reload a web application (hot deploy)
  2. FAQ What is hot code replace?

24 comments on “How to configure hot deploy in Eclipse

  1. Thank a lot, doing this configuration has saved my time. But I am just wondering Isn’t the name in step 4 i.e. “Enable autoreloading enabled” opposite to what it is doing, since we have UNCHECKED this, then ideally we are telling do not enable autorealoading ?

  2. USE DCEVM -The Dynamic Code Evolution Virtual Machine (DCE VM) is a modification of the Java HotSpot(TM) VM that allows unlimited redefinition of loaded classes at runtime. The current hotswapping mechanism of the HotSpot(TM) VM allows only changing method bodies. The enhanced VM allows adding and removing fields and methods as well as changes to the super types of a class.

  3. How can i deploy an exploded war on tomcat using eclipse neon ide and still use the hot deploy option ? Not able to configure this , application doesn’t seem to be deployed on tomcat in eclipse ide

  4. Hot-deploy works quite well. But after that my spring context gets reloaded. Every bean of my app hast to be initiated and it takes lot of time. Is there a way to do a code change described in the article but WITHOUT spring context reload?

  5. Thanks for the tip, I was looking for the way to disable it, as it’s on by default for me. Quite a time consuming every save.

  6. I followed the directions, my Spring application keeps redeploying after I change anything. Not sure what I am doing wrong.

    1. Even with Hotswapagent my application kept reloading every time I modified a .java file when I had auto publish turned on, the fix was to do this in Tomcat’s context.xml file in addition to turning auto reloading off as described by mkyong above:


      +

Leave a Comment

Your email address will not be published. Required fields are marked *