考虑Maven中的默认Webapp配置(对于我使用https://repository.apache.org/content/groups/public/archetype-catalog.xml中的struts2-blank-archetype的测试用例)。
这个原型附带maven jetty插件的版本6.通过下面的配置,如果我更改/ src / main / webapp / WEB-INF / 下的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分钟测试:
答案 0 :(得分:1)
自从jetty-6天开始运行各种不同的项目配置以来,插件已经有了很多改进。查看插件的文档页面,选择最符合您需求的方案,并根据需要调整配置。我怀疑你的情况属于“运行未组装的webapp”。
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
我会注意到,对于jetty-9,我们最终将插件带到了eclipse,因此它可以与项目一起使用,该项目将groupId更改为org.eclipse.jetty,即9.0.0的jetty-maven-plugin .M2将在下周初处于中心位置(文档也将进行更新)
欢呼答案 1 :(得分:0)
mmalmeida, 我使用标准的jetty-test-webapp测试了这种情况。我在src / main / webapp / jsp中放了一个jsp,转发到src / main / webapp / WEB-INF中的另一个jsp。使用mvn jetty:run运行jetty maven插件,正确发生前进。如果我让插件继续运行并修改WEB-INF中的jsp,并在浏览器上执行shift-reload,它会按预期选择更改的页面。
请注意,您无需声明scanTargets或其他任何此类性质。上面的行为(jsp reload)是jsp引擎的一个函数,它在开发模式下运行时会在收到请求时检查jsp文件的时间戳,并在必要时动态重新编译。
我认为您必须提供有关您的特定网络应用的更多详细信息 - 特别是您的设置与我刚才描述的测试方案有何不同 - 以便进一步了解这一点。
问候 扬
答案 2 :(得分:0)
在之前的评论之后,我能够确定此问题的根本原因。虽然这有点特定于我们的用例,但我仍然与社区分享。
这主要是由文件的时间戳引起的。我的工作目录是另一台服务器的NFS安装。由于一些奇怪的原因*该服务器上的时钟被延迟。这意味着如果它是9:00并且我更改了JSP文件,则该文件将以8:40加上时间戳。
对于用于JSP文件重新加载的策略,Jetty可能已经从6改为8 - 而Jetty 6似乎并不关心文件的时间戳并且无论如何刷新,Jetty 8更敏感并且不会重新加载文件。
所以这里的“解决方案”只是更新远程NFS服务器的时钟。
*表示NTP守护程序正在运行,我可以ping通ntp服务器,同一网络上的其他计算机具有相同的NTP设置,但此计算机仍有时钟漂移