gradle - jettyRun 在复制任务上引发了 war 写入问题

标签 gradle jetty war

我已经在一个爆炸的 war 文件上使用 jetty 设置了一个 gradle 项目,并结合了 watch 插件。对于任何 java 依赖项,如果源被修改,watch 插件将启动“jar”任务和复制任务,将生成的 jar 放入分解的 war 文件中。使用 jetty 的自动重新加载,这个新 jar 被拾起。一切都很好。

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

有没有办法解决这个问题而不必停止/启动 jetty ?这是我的配置/任务的相关部分。

jetty 配置如下:

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

watch 配置:
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

最佳答案

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

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

其中指出:

Jetty buffers static content for webapps such as html files, css files, images etc and uses memory mapped files to do this if the NIO connectors are being used. The problem is that on Windows, memory mapping a file causes the file to be locked...



为了解决这个问题,我只是在 <web-app> 下添加了以下内容web.xml 中的节点:
<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>

关于gradle - jettyRun 在复制任务上引发了 war 写入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554990/

相关文章:

scala - 在gradle中使用sbt Avrohugger插件

build - 在Android Gradle构建中运行Proguard的堆用完了

Gradle - 如何从命令行检测 --debug 标志?

java - Jetty可以自动编译*.java文件吗?

java - 将包装更改为 war 原因 404

java - 无法将 .war 应用程序部署到 GlassFish 3.1.2

gradle - 如何在 thymeleaf 模板中访问 gradle 变量?

eclipse-plugin - 从 jetty 8 迁移到 jetty 9 后 ProxyServlet 停止工作

elasticsearch - Elasticsearch日志条目说明

java - 瘦 war 的 ClassNotFoundException