无法从IntelliJ重新加载Jetty服务器上的静态文件

时间:2016-09-21 15:14:19

标签: intellij-idea jetty

我正在开发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.defaultsDescriptorPath<Property name="jetty.home" default="." />/etc/webdefault.xml中设置了默认值etc/jetty-deploy.xml

不幸的是,这没有任何区别。 <{3}}中提议的将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. [...]

1 个答案:

答案 0 :(得分:3)

我在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至少在几年内没有使用过它。这对我有用。基本上和其他帖子一样,但是这个片段使用的是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包含二进制文件,库和原始的DEFAULT配置。您需要覆盖的所有内容都覆盖在您设置为jetty.base的目录中。

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

  

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

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