8

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

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

同一篇文章还描述了如何解决这个问题。基本上你必须:

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

这两件事都需要在项目中添加一些特定于码头的配置文件,我不想这样做——码头插件只是为了方便而使用,为它维护配置感觉不对。

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

编辑:

现在,我选择了您设置useFileMappedBufferfalse. 这是如何做到的:

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

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

  3. 将默认的 servlet 初始化参数更改useFileMappedBufferfalse

我将研究使用插件的嵌入码头的选项。

4

2 回答 2

3

我发现一个插件似乎是一个更好的选择:

https://github.com/akhikhl/gretty

正面的

  • 不锁定您的文件并支持热部署(即使是 Gretty 所说的“快速重新加载”)
  • Gretty 1.2.0 使用 Jetty 9.2.9.v20150224。Gradle 2.2.1 提供的 Jetty 插件使用 Jetty 6.1.25。
  • 使用相同的任务jettyRun(或更简单地run)。
  • “按任意键停止服务器”。Jetty 插件需要 CTRL+C 然后 Y。
  • 据我所知,文档似乎很棒(Gradle没那么多)

负面的

  • 有点臃肿的代码来设置 buildscript 的类路径依赖或直接从 URL 应用插件(见 doc
  • 除非您明确表示,否则 Gretty 崩溃apply plugin: 'war'(Jetty 插件扩展了 War 插件)
于 2015-03-27T16:22:53.153 回答
1

Kiril 回答了他自己的问题,非常感谢。您应该按照 Kiril 的说明进行操作,这将帮助您找到合适的webdefault.xml.

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

gradle jettyRun -i

你会看到这样的东西:

...
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
...

我花了一段时间才找到 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

于 2013-09-26T15:54:35.013 回答