Jetty Maven插件忽略了自定义webdefault.xml

时间:2011-02-14 00:59:39

标签: windows jetty maven-plugin maven-3 maven-jetty-plugin

我正在尝试使用在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后,它保存得很好。每次都会发生这种情况。

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

3 个答案:

答案 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>