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

时间:2012-10-26 18:43:53

标签: eclipse maven struts2 jetty maven-jetty-plugin

考虑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分钟测试:

  1. 创建原型struts2-archetype-convention(“mvn archetype:generate”,308,package war)。
  2. 编辑pom并将jetty插件配置设置为上面列出的配置(版本6)
  3. mvn jetty:run
  4. 在“http:// localhost:8080”
  5. 上打开浏览器
  6. 请参阅页面上的“语言”
  7. 编辑/src/main/webapp/WEB-INF/content/hello.jsp - 更改其他内容的“语言”。保存。
  8. 刷新浏览器并查看更改。
  9. 重复这些步骤。在步骤2中,将artifactId和version更改为上面列出的版本(版本8)
  10. 在JSP中执行更改后,确认网页在刷新时不会更改。

3 个答案:

答案 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设置,但此计算机仍有时钟漂移