Gradle Jetty插件锁定文件

时间:2012-06-14 11:42:44

标签: jetty gradle

有没有办法完全修复jetty gradle引起的文件锁定问题?

一些澄清:
通过运行gradle jettyRun, jetty使用Gradle Jetty plugin时,会导致在使用Windows时锁定静态资源文件(html,css,js等)。 您可以在Files locked on Windows中查看问题的说明。

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

  1. 禁用文件映射缓冲区
  2. 根本不使用NIO。
  3. 这两件事都需要在项目中添加一些特定于码头的配置文件,我不想这样做 - jetty插件只是为了方便而使用,并且维护配置感觉不对。

    我不需要NIO在本地计算机上进行测试,因此任何解决方案都可以使用。

    修改

    目前,我选择了将useFileMappedBuffer设置为false的选项。这是怎么做的:

    1. 指定webdefault.xml的路径

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

    3. 将默认servlet init参数useFileMappedBuffer更改为false
    4. 我将研究使用嵌入式Jetty插件的选项。

2 个答案:

答案 0 :(得分:3)

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

https://github.com/akhikhl/gretty

积极因素

  • 不会锁定您的文件并支持hot deployment(即使是Gretty致电" fast reload")
  • Gretty 1.2.0使用Jetty 9.2.9.v20150224。 Gradle 2.2.1提供的Jetty插件使用Jetty 6.1.25。
  • 使用相同的任务jettyRun(或更简单地run)。
  • "按任意键停止服务器"。 Jetty插件需要CTRL + C然后Y.
  • 据我所知,documentation似乎很棒(Gradle's没那么多)

否定

  • 用于设置buildscript的类路径依赖关系或直接从URL(see doc
  • 应用插件的更臃肿的代码
  • Gretty崩溃,除非你明确地apply plugin: 'war'(Jetty插件扩展了War插件)

答案 1 :(得分: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