Gradle Jetty插件锁定文件

jmr*_*ruc 8 jetty gradle

有没有办法解决jetty完全由gradle?引起的文件锁定问题?

一些说明:
当使用Gradle Jetty插件时,通过运行gradle jettyRun,jetty会导致在使用Windows时锁定静态资源文件(html,css,js等).您可以在Windows上锁定的文件中看到问题的描述.

同一篇文章还介绍了如何解决这个问题.基本上你必须要么:

  1. 禁用文件映射缓冲区
  2. 根本不使用NIO.

这两件事都需要在项目中添加一些特定于码头的配置文件,我不想这样做 - jetty插件仅用于方便,并且维护配置感觉不对.

我不需要NIO在本地机器上进行测试,因此任何解决方案都可以.

编辑:

现在,我在挑你设置的选项useFileMappedBufferfalse.这是怎么做的:

  1. 指定您webdefault.xml喜欢的路径

    [jettyRun, jettyRunWar,jettyStop]*.with {
        //other configs
    
        webDefaultXml = file("${project.webAppDir}/WEB-INF/jetty-webdefault.xml")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从最新的6.1.x jetty发行版中获取文件.该插件似乎只支持jetty 6.你可以将它本地化jetty-6.1.26\etc\webdefault.xml.显然,您必须将它放在上一步指定的路径上.

  3. 将默认的servlet init参数更改useFileMappedBufferfalse

我将研究使用嵌入式插件的选项.

veg*_*4me 1

基里尔回答了他自己的问题,非常感谢。您应该遵循 Kiril 的说明,这将帮助您找到合适的webdefault.xml.

要找出 Gradle 启动的 Jetty 版本,请执行

gradle jettyRun -i
Run Code Online (Sandbox Code Playgroud)

你会看到这样的东西:

...
Tmp directory =  determined at runtime
Web defaults = org/mortbay/jetty/webapp/webdefault.xml
Web overrides =  none
Webapp directory = C:\dev\my-project\src\main\webapp
Starting jetty 6.1.25 ...
jetty-6.1.25
...
Run Code Online (Sandbox Code Playgroud)

我花了一段时间才找到 Jetty 6.1.25 的副本,因为它不再列在 Jetty 下载页面上(甚至不在存档部分中!)。

然后,您可以从此处获取适当的副本webdefault.xml,根据您的需要调整版本号:

http://grepcode.com/file/repo1.maven.org/maven2/org.mortbay.jetty/jetty/6.1.25/org/mortbay/jetty/webapp/webdefault.xml