首页 文章

什么maven-jetty-plugin 8配置允许在JSP文件发生变化时重新加载?

提问于
浏览
3

考虑Maven中的默认Webapp配置(对于测试用例,我使用了来自https://repository.apache.org/content/groups/public/archetype-catalog.xml的struts2-blank-archetype) .

这个原型附带maven jetty插件的版本6.通过下面的配置,如果我 change a jsp under /src/main/webapp/WEB-INF/ 并保存它,刷新浏览器将显示这些更改 .

<插件>
<的groupId> org.mortbay.jetty </的groupId>
<artifactId的>行家-码头-插件</ artifactId的>
<版本> 6.1.21 </版本>
<结构>
<scanIntervalSeconds> 10 </ scanIntervalSeconds>
</配置>
</插件>
(注意,甚至不需要放置scantarget元素,因为我们不希望在更改jsp时重新加载完整的容器) .

但是, the exact same configuration of version 8 of the plugin (见下文)不起作用 . 如果我更改相同的jsp,刷新浏览器将显示旧的JSP内容 . 只有通过停止和启动服务器才能看到更改 .

<插件>
<的groupId> org.mortbay.jetty </的groupId>
<artifactId的>码头-行家-插件</ artifactId的>
<版本> 8.1.7.v20120910 </版本>
<结构>
<scanIntervalSeconds> 10 </ scanIntervalSeconds>
</配置>
</插件>

这个配置有什么问题,以及 configuration would produce the same results in version 8 (即在不重启服务器的情况下自动刷新jsp内容)?

EDIT: 这是您可以尝试的2分钟测试:

  • 创建原型struts2-archetype-convention("mvn archetype:generate",308,package war) .

  • 编辑pom并将jetty插件配置设置为上面列出的配置(版本6)

  • mvn码头:跑

  • 在"http://localhost:8080"上打开浏览器

  • 请参见页面上的"Languages"

  • 编辑/src/main/webapp/WEB-INF/content/hello.jsp - 更改"Languages"以获取其他内容 . 保存 .

  • 刷新浏览器并查看更改 .

  • 重复这些步骤 . 在第2步,将artifactId和版本更改为上面列出的版本(版本8)

  • 在JSP中执行更改后,确认网页在刷新时不会更改 .

3 回答

  • 1

    自从jetty-6天开始运行各种不同的项目配置以来,插件已经有了很多改进 . 查看插件的文档页面,选择最符合您需求的方案,并根据需要调整配置 . 我怀疑你的案子是在“运行未组装的webapp”下 .

    http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

    我会注意到,对于jetty-9,我们最终将插件带到eclipse,这样它就可以使用将把groupId更改为org.eclipse.jetty的项目,9.0.0.M2的jetty-maven-plugin将会下周初在中央(文件也要更新)

    干杯

  • 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文件的时间戳,并在必要时动态重新编译 .

    我认为您必须提供有关您的特定Web应用程序的更多详细信息 - 特别是您的设置与我刚才描述的测试方案有何不同 - 以便进一步了解这一点 .

    尊重Jan

  • 0

    在之前的评论之后,我能够确定此问题的根本原因 . 虽然这有点特定于我们的用例,但我仍然与社区分享 .

    这基本上是由文件的时间戳引起的 . 我的工作目录是另一台服务器的NFS安装 . 由于一些奇怪的原因*该服务器上的时钟被延迟 . 这意味着如果它是9:00并且我更改了JSP文件,则该文件将以8:40加上时间戳 .

    对于用于JSP文件重新加载的策略,Jetty可能已经从6改为8 - 而Jetty 6似乎并不关心文件的时间戳并且无论如何刷新,Jetty 8更敏感并且不重新加载文件 .

    所以这里的“解决方案”只是更新远程NFS服务器的时钟 .

    *意味着NTP守护程序正在运行,我可以ping通ntp服务器,同一网络上的其他机器具有相同的NTP设置但是这台机器仍然有其时钟漂移

相关问题