jettyRun爆炸战争写复制任务的问题

时间:2014-12-18 20:20:23

标签: gradle jetty war

我在一个爆炸的war文件中使用jetty设置了一个gradle项目,并与watch插件结合使用。对于任何java依赖项,如果源被修改,watch插件将启动'jar'任务和一个复制任务,将生成的jar放入爆炸的war文件中。使用jetty的自动重装,这个新的罐子被拿起来。一切都很好。

我在包含javascript和css源文件的模块上有类似的监视。在修改后,构建文件(使用gulp插件进行concat / minify)并执行复制任务以将它们复制到war文件中。但是,在尝试复制.js和.css文件时,我遇到了由只读问题引起的异常,因为jetty当前正在使用这些文件。

无论如何都可以在不必停止/启动码头的情况下解决此问题?以下是我的配置/任务的相关部分。

jetty配置如下:

jettyRun {
    httpPort = 8080
    contextPath = project.name
    scanIntervalSeconds = 1
    reload = "automatic"
    webAppSourceDirectory = file(EXPLODED_DIR)
}

观看配置:

watch {         
    clientwatch {
        files fileTree(CLIENT_SRC_DIR).include('**/*.js', '**/*.css')
        tasks ':client_module:assemble', 'copyClientFiles'
    }
}

复制任务:

task copyClientFiles(type: Copy) {
    from fileTree(CLIENT_BUILD_DIR).include("*.min.js", "*.min.css")
    into EXPLODED_DIR
}
copyClientFiles.inputs.dir CLIENT_BUILD_DIR
copyClientFiles.outputs.dir EXPLODED_DIR

1 个答案:

答案 0 :(得分:0)

我实际上在这里找到了解决问题的方法:

http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows

哪个州:

  

Jetty缓冲web应用程序的静态内容,例如html文件,css文件,图像等,如果正在使用NIO连接器,则使用内存映射文件执行此操作。问题是在Windows上,内存映射文件会导致文件被锁定...

要解决此问题,我只需在web.xml中的<web-app>节点下添加以下内容:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
    <init-param>
       <param-name>useFileMappedBuffer</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>