我正在尝试使用在webdefault.xml中将useFileMappedBuffer
设置为false的技术来绕过common issue of Jetty locking static files on Windows。不幸的是,Jetty每次都没有拿起我的自定义webdefault.xml。
我正在使用Apache Maven 3.0.2。我已尝试使用maven-jetty-plugin (v6.1.26)和jetty-maven-plugin (v8.0.0.M2),但没有区别。在运行Jetty之前,我已经尝试过运行干净和重建。
我每次验证我的webdefault.xml都是从与插件相同的版本中获得并且具有正确的设置,即只将此设置从true更改为false:
...
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>
</init-param>
...
这就是我的pom.xml Jetty插件部分的样子:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/</contextPath>
<webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml>
</configuration>
</plugin>
我也尝试改变文件的路径:
<webDefaultXml>${basedir}/src/main/resources/webdefault.xml</webDefaultXml>
Everywhere I've seen this exact solution听起来它适用于其他人(虽然我发现one instance where someone had my issue)。 jetty的启动在输出中有这个:
> mvn jetty:run
...
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides = none
...
这进一步让我觉得它没有得到应用。输出中的所有其他路径都是正确的。
我在Jetty运行时看到的最直接的问题是,每当我使用IntelliJ IDEA 10编辑静态文件(JavaScript,CSS等)时,都会收到以下错误消息:
Cannot save file:
D:\...\... (The requested operation cannot be performed on a file with a user-mapped section open)
在我停止Jetty后,它保存得很好。每次都会发生这种情况。
任何想法我可能做错了什么?提前致谢。
答案 0 :(得分:15)
我发现新的Jetty插件jetty-maven-plugin(v8.0.0.M2)的文档完全不同,看起来配置名称已更改:
http://wiki.eclipse.org/Jetty/Reference/webdefault.xml#Using_the_Jetty_Maven_Plugin
<project>
...
<plugins>
<plugin>
...
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webAppConfig>
...
<defaultsDescriptor>/my/path/to/webdefault.xml</defaultsDescriptor>
</webAppConfig>
</configuration>
</plugin>
...
</plugins>
...
</project>
这似乎适用于较新的插件。我仍然不确定为什么v6插件没有拿起自定义配置。
答案 1 :(得分:2)
我发现使用maven-jetty-plugin 6.1.24的唯一解决方案是: http://false.ekta.is/2010/12/jettyrun-maven-plugin-file-locking-on-windows-a-better-way/
答案 2 :(得分:0)
Jetty文档概述了三种实现方法(从Jetty 9开始):
https://www.eclipse.org/jetty/documentation/current/troubleshooting-locked-files-on-windows.html
我在Maven中成功使用了init-param方法:
<!-- Running an embedded server for testing/development -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.9.v20180320</version>
<configuration>
<webApp>
<_initParams>
<org.eclipse.jetty.servlet.Default.useFileMappedBuffer>false</org.eclipse.jetty.servlet.Default.useFileMappedBuffer>
</_initParams>
</webApp>
</configuration>
</plugin>