14

我试图通过在 webdefault.xml中设置为 false 的技术来解决 Jetty 在 Windows 上锁定静态文件的常见问题。useFileMappedBuffer不幸的是,每次 Jetty 都没有选择我自定义的 webdefault.xml。

我正在使用 Apache Maven 3.0.2。我试过使用maven-jetty-plugin (v6.1.26)jetty-maven-plugin (v8.0.0.M2)但没有区别。在运行 Jetty 之前,我也尝试过运行 clean 和重建。

每次我都验证了我的 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>

在任何地方我都看到了这个确切的解决方案,听起来它对其他人有用(尽管我发现有人遇到我的问题的一个实例)。码头的启动在输出中有这个:

> 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 之后,它保存得很好。每次都会发生这种情况。

有什么想法我可能做错了吗?提前致谢。

4

3 回答 3

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 插件没有选择自定义配置。

于 2011-02-14T22:20:14.170 回答
2

我发现与 maven-jetty-plugin 6.1.24 一起使用的唯一解决方案是:http: //false.ekta.is/2010/12/jettyrun-maven-plugin-file-locking-on-windows-a-better -方式/

于 2013-04-12T14:27:14.833 回答
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>
于 2019-09-13T20:33:20.640 回答