考虑一下Maven中的默认webapp配置(对于测试用例,我使用了来自https://repository.apache.org/content/groups/public/archetype-catalog.xml的struts2空白原型)。
这个原型随maven jetty插件的版本6而来。使用下面的配置,如果我更改/src/main/webapp/WEB/下的jsp并保存它,刷新浏览器将显示这些更改。
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.21</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> (注意,我们甚至不需要放置scantarget元素,因为我们不需要在更改jsp时重新加载完整的容器)。
但是,--插件的第8版完全相同的配置(参见下文)--不起作用。如果我更改相同的jsp,刷新浏览器将显示旧的JSP内容。只有停止并启动服务器,我才能看到更改。
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.7.v20120910</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin>
这个配置有什么问题,什么配置会在版本8中产生相同的结果(即,在不重新启动服务器的情况下自动刷新jsp内容)?
编辑:,这是一个2分钟的测试,您可以尝试:
发布于 2012-11-02 09:47:01
在之前的评论之后,我能够找出这个问题的根源。虽然这有点特定于我们的用例,但我还是要与社区分享这一点。
这基本上是由文件的时间戳造成的。我的工作目录是另一个服务器的NFS挂载。由于一些奇怪的原因,那个服务器上的时钟被延迟了。这意味着,如果是9:00,并且我更改了JSP文件,该文件将被加盖8:40的时间戳。
Jetty中关于JSP文件重新加载的策略可能已经从6更改为8--而Jetty 6似乎并不关心文件的时间戳和刷新,Jetty 8更敏感,也不会重新加载文件。
因此,这里的“解决方案”只是更新远程NFS服务器的时钟。
*意味着NTP deamon正在运行,我可以平分ntp服务器,相同网络上的其他机器具有相同的NTP设置,但这台机器仍然存在时钟漂移。
发布于 2012-10-31 00:24:29
已经有了一系列的改进插件,从码头-6天运行各种不同的项目配置。查看插件的文档页面,选择最适合您需要的场景,并根据需要调整配置。我怀疑你的案子是在“运行一个未组装的网络应用程序”之下。
Plugin
我将注意到,对于jetty-9,我们终于将插件带向eclipse,这样它就可以使用将groupId更改为org.eclipse.jetty的项目,jetty plugin为9.0.0.M2将于下周初在中央版(文档也将更新)。
干杯
发布于 2012-11-02 05:10:46
mmalmeida,我已经使用标准的测试了这个场景。我在src/main/webapp/jsp中放了一个jsp,它转发到src/main/webapp/WEB中的另一个jsp。用mvn jetty启动jetty插件:运行,转发将正确进行。如果我保持插件运行并修改WEB中的jsp,并在浏览器上执行shift-重新加载,它将像预期的那样拾取更改的页面。
请注意,您不需要声明scanTargets或其他任何性质的东西。上述行为(jsp重新加载)是jsp引擎的一个函数,在开发模式下运行时,jsp引擎在接收请求时将检查jsp文件上的时间戳,并在必要时动态重新编译。
我认为您必须提供更多关于特定get应用程序的详细信息--特别是您的设置与我刚才描述的测试场景有何不同--以便进一步了解这一点。
问候简
https://stackoverflow.com/questions/13092601
复制相似问题