当我在 Eclipse 中使用 Tomcat 并让我的 Web 应用程序通过 Eclipse 运行时,对 Java 类或 JSP 页面的任何更改似乎都会直接推送到 tomcat 中,而无需重新启动 tomcat 或应用程序。
有没有办法在 Eclipse 下配置 Jetty 以使其工作方式相同?到目前为止,我似乎所能做的就是更改代码,然后手动重新启动码头。
配置 jetty.xml 以使用启用“热部署”的 ContextDeployer。这可能已经默认配置。本质上,Jetty 会以预定的时间间隔扫描 contexts 文件夹。如果它检测到 WAR 文件或 war 目录已更改,则它会自动重新加载上下文。
在下面的示例中,${jetty.home}/contexts 文件夹被配置为查找上下文 XML 文件,这些文件告诉 Jetty 要监控哪些 Web 应用程序。scanInterval 设置为 5 毫秒,这意味着 Jetty 每 5 毫秒检查一次更改。您将在 jetty.xml 中找到此配置:
<!-- =========================================================== -->
<!-- Configure the context deployer -->
<!-- A context deployer will deploy contexts described in -->
<!-- configuration files discovered in a directory. -->
<!-- The configuration directory can be scanned for hot -->
<!-- deployments at the configured scanInterval. -->
<!-- -->
<!-- This deployer is configured to deploy contexts configured -->
<!-- in the $JETTY_HOME/contexts directory -->
<!-- -->
<!-- =========================================================== -->
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.ContextDeployer">
<!-- the ContextHandlerCollection to modify once a webapp is added or removed (Allows Hot Deployment) -->
<Set name="contexts"><Ref id="Contexts"/></Set>
<!-- the directory which will contain your context.xml files -->
<Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
<!-- the interval in milliseconds to periodically scan the configurationDir -->
<Set name="scanInterval">5</Set>
</New>
</Arg>
</Call>
您还需要创建一个 WebAppContext 条目。将它放在一个名为 test.xml 的文件中,并将该文件放在 /contexts 目录中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/test</Set>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>
</Configure>
请注意,<Set name="war">
指的是实际文件夹,而不是 WAR 文件。此文件夹应包含应用程序的根目录,例如 /WEB-INF 文件夹和所有其他文件。
如果您希望立即识别 JSP 和其他页面,则需要将 webapps 文件夹中的 Web 应用程序配置为从展开的 WAR 而非 WAR 文件本身运行。之后,您需要将 Eclipse 指向该位置,这样您就可以直接从 webapps/test 文件夹修改和编译文件。
总之,您并不清楚您正在运行哪个版本的 Jetty。然而,虽然不同版本的 Jetty 配置可能会有很大差异,但这应该可以帮助您入门。有关 Jetty 配置和故障排除的更多文档,请参阅Jetty 网站或Webtide 网站。
一旦一切配置正确,您就可以直接从该文件夹修改和编译代码,而无需重新启动 Jetty。
该规则的唯一例外是修改 web.xml 的情况。如果您修改 web.xml,您很可能需要重新启动 Jetty。
最后要注意的是,请确保不要在 webapps 文件夹中部署任何名为 test.war 的 WAR 文件,除非您首先禁用了 WAR 文件的爆炸。您最终可能会覆盖您的代码!
如果您需要更多指导,您可能会发现ContextDeployers 上的 Jetty 文档以及Deploying a Webapp to Jetty很有帮助。祝你好运!