我正在实现Grails插件并且遇到很大问题,因为Grails会在重新加载静态资源之前触发onChange
事件。所以有时它会返回过时的css / js版本。
请解释一下Grails如何重新加载静态资源(css / js)(当我使用run-app
运行应用程序时)?重新加载静态资源后是否可以触发onChange
事件?
答案 0 :(得分:0)
如果您使用的是资源插件,则可以查看his source code。我认为他会安排更改,如果再次更改文件,可能会取消更改。
def onChange = { event ->
if (event.source instanceof FileSystemResource) {
if (isResourceWeShouldProcess(event.source.file)) {
log.info("Scheduling reload of resource files due to change of file $event.source.file")
triggerReload {
event.application.mainContext.grailsResourceProcessor.reloadChangedFiles()
}
}
} else if (handleChange(application, event, getResourceMapperArtefactHandler().TYPE, log)) {
log.info("Scheduling reload of mappers due to change of $event.source.name")
triggerReload {
event.application.mainContext.grailsResourceProcessor.reloadMappers()
}
} else if (handleChange(application, event, getResourcesArtefactHandler().TYPE, log)) {
log.info("Scheduling reload of modules due to change of $event.source.name")
triggerReload {
event.application.mainContext.grailsResourceProcessor.reloadModules()
}
}
}
答案 1 :(得分:0)
好的......我花了4-5个小时来调试它。 Grails使用Tomcat处理静态资源 - 检查org.apache.catalina.servlets.DefaultServlet.serveResource
方法。 Tomcat缓存静态资源5秒钟。因此可能存在Grails触发插件文件已更改但Tomcat将在GET
请求上返回缓存值的情况。我创建了票证ticket并更精确地描述了