3

考虑 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码头:运行
  4. 在“http://localhost:8080”上打开浏览器
  5. 请参阅页面上的“语言”
  6. 编辑 /src/main/webapp/WEB-INF/content/hello.jsp - 将“语言”更改为其他内容。节省。
  7. 刷新浏览器并查看更改。
  8. 重复这些步骤。在步骤 2 中,将 artifactId 和版本更改为上面列出的(版本 8)
  9. 确认在 JSP 中执行更改后网页不会在刷新时更改。
4

3 回答 3

1

自 jetty-6 天以来,该插件已进行了大量改进,以运行各种不同的项目配置。查看插件的文档页面,选择最能满足您需求的方案并根据需要调整配置。我怀疑您的案例在“运行未组装的网络应用程序”下。

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

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

干杯

于 2012-10-31T00:24:29.633 回答
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 重新加载)是 jsp 引擎的一个功能,在开发模式下运行时,它会在接收请求时检查 jsp 文件上的时间戳,并根据需要即时重新编译。

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

问候简

于 2012-11-02T05:10:46.437 回答
0

在之前的评论之后,我能够确定这个问题的根本原因。虽然这有点特定于我们的用例,但我还是与社区分享了这一点。

这基本上是由文件的时间戳引起的。我的工作目录是另一台服务器的 NFS 挂载。由于某种奇怪的原因*该服务器上的时钟延迟了。这意味着如果现在是 9:00 并且我更改了 JSP 文件,那么该文件的时间戳将是 8:40。

关于用于 JSP 文件重新加载的策略,Jetty 从 6 到 8 可能发生了变化——虽然 Jetty 6 似乎并不关心文件的时间戳并无论如何都会刷新,但 Jetty 8 更敏感并且不会重新加载文件。

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

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

于 2012-11-02T09:47:01.380 回答