【问题标题】:Cannot reload static file on Jetty server from IntelliJ无法从 IntelliJ 重新加载 Jetty 服务器上的静态文件
【发布时间】:2017-03-17 07:07:06
【问题描述】:

我正在 IntelliJ 2016.2.4 (Windows 7) 中开发一个项目,该项目设置为使用标准“Jetty 服务器”运行配置部署到本地 Jetty 9.3 服务器。

重新加载普通 Java 类(在调试模式下)正常工作。但是当我尝试重新部署静态文件main.js 时,IntelliJ 显示以下错误:

java.io.FileNotFoundException: D:\Projects\portal\build\exploded\portal-project\js\main.js (The requested operation cannot be performed on a file with a user-mapped section open)

按照this,我尝试进行修改

<init-param>
  <param-name>useFileMappedBuffer</param-name>
  <param-value>false</param-value> <!--Changed from <param-value>false</param-value>-->
</init-param>

发送至 Jetty 分发目录的 etc/webdefault.xml。没有对分发进行其他更改。特别是,jetty.deploy.defaultsDescriptorPathetc/jetty-deploy.xml 中设置了默认值&lt;Property name="jetty.home" default="." /&gt;/etc/webdefault.xml

不幸的是,这没有任何区别。按照this answer 的建议将maxCachedFiles 设置为0 也不起作用。

我在某处发现 Jetty Maven 插件可能会解决问题,但该项目不使用 Maven(也不是 Gradle)。

编辑:我不知道它是否有任何意义,但在启动时我得到了日志行

2016-09-21 17:27:33.275:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended. [...]

【问题讨论】:

  • 虽然我在 Windows 10 上,但我无法复制它。奇怪的是,我无法使用 DefaultServlet 在 Win10 上显示错误。我可以在使用 ResourceHandler 时遇到错误,但是在 webdefault.xml 中进行更改会清除它。您确定在 web.xml 或代码中的其他地方没有其他调用与此冲突吗?

标签: intellij-idea jetty


【解决方案1】:

我在 Windows 10 Pro 上,运行 IntelliJ IDEA 2016.3.4 和 Jetty 9.3.10.v20160621 - 我能够复制 Halle 的结果。编辑 webdefault.xml 没有帮助。

How to make Jetty dynamically load "static" pages 有答案 - 将上下文参数添加到您的 webapp 的 web.xml。

但正如所写,它不适用于较新版本的 Jetty,因为它引用了一个命名空间“org.mortbay”,而 Jetty 至少已经有几年没有使用它了。这对我有用。本质上与其他帖子中的内容相同,但这个 sn-p 使用 org.eclipse,而不是 org.mortbay:

<context-param>
    <param-name>org.eclipse.jetty.servlet.Default.useFileMappedBuffer</param-name>
    <param-value>false</param-value>
</context-param>

现在,谈谈你的另一点......

当前最佳做法是有一个单独的 jetty.home 目录和 jetty.base 目录。这个想法是 jetty.home 包含二进制文件、库和原始的默认配置。您需要覆盖的所有内容,都可以在您设置为 jetty.base 的任何目录中覆盖。

我的生产 J2EE 服务器运行 Jetty,它们有单独的主目录和基本目录。它更干净,如果您以这种方式进行设置,则破坏事物的可能性要小得多。正如http://www.eclipse.org/jetty/documentation/current/startup-base-and-home.html 所说:

Jetty Home 应始终被视为真实的标准。所有配置修改、更改和添加都应在相应的 Jetty Base 目录中进行。

我的笔记本电脑没有单独的主目录和基本目录,我在开发时收到警告,我不在乎。您可以在没有单独的 jetty.base 的情况下运行 Jetty - 它不会导致任何问题。这不是 BCP。我绝对会推荐在生产环境中单独的主目录和基本目录,但在开发服务器上,我认为这没什么大不了的。

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2015-07-16
    • 1970-01-01
    • 2021-03-25
    • 2021-04-23
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多