我在一个爆炸的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
答案 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>