2

我定义了一个标准的 Maven webapp 结构,它使用 Spring MVC。

我正在使用嵌入式 Jetty 服务器(java 类)来测试开发中的应用程序。

用于创建 Jetty 服务器的代码概述如下。如果我对任何 JSP 文件进行更改,这些更改会立即在浏览器中可见。

但是,如果我更改任何类文件,例如控制器,更改不会热部署?

我该怎么做才能让它工作?

我已经搜索过这个,我想我需要使用org.eclipse.jetty.util.Scanner类,特别是setScanInterval方法,但不知道如何连接它?

这是创建服务器的代码

    String webAppDir = "src/main/webapp/";
    Server server = new Server(8080);
    WebAppContext webApp = new WebAppContext();
    webApp.setContextPath("/");
    webApp.setDescriptor(webAppDir + "/WEB-INF/web.xml");
    webApp.setResourceBase(webAppDir);
    webApp.setParentLoaderPriority(true);

    HandlerCollection hc = new HandlerCollection();
    ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection();
    hc.setHandlers(new Handler[] { contextHandlerCollection });
    hc.addHandler(webApp);
    server.setHandler(hc);
    return server;

提前致谢

4

1 回答 1

3

对于热部署,您需要使用 WebAppProvider 和 DeploymentManager。您可以配置这些来管理扫描更改和重新加载 web 应用程序。所以很明显,WebappContext 不是管理 webapp 部署的东西,它只是被部署的容器类,所以还有另一种机制可以处理部署/重新部署的概念。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-deploy/src/test/resources/jetty-deploy-wars.xml

您可以在那里获取那块 xml 并将其转换为您需要执行此嵌入的 java 调用。

或者使用类似 jrebel jvm 插件的东西,它提供了自动类重新加载。

于 2012-10-05T13:30:34.890 回答