I am using Eclipse IDE and and embedded Jetty Server on Windows 7.

I can run the app by starting jetty and view it my browser without a problem.

However if I edit a file in my app which is in "webapp" folder e.g. a JavaScript file, I get the following error

Could not write file: sample.js
sample.js (The requested operation cannot be performed on a file with a user-mapped section open)

If I stop Jetty I can save the file. So is there a way to stop Jetty locking the file?

Here's how I create the WebApp context in JettyServer.java

private static WebAppContext createWebapp() {
    String webAppDir = "src/main/webapp/";
    WebAppContext webApp = new WebAppContext();
    webApp.setContextPath(CONTEXT_PATH);
    webApp.setResourceBase(webAppDir);
    webApp.setParentLoaderPriority(true);
    return webApp;
}
有帮助吗?

解决方案

This is common problem for jetty within windows environment. You should follow this insturction to save file without shutdown the jetty server.

其他提示

You can turn off this behaviour by setting useFileMappedBuffer to false for the default servlet. Doing so is a bit tricky.

private static WebAppContext createWebapp() {
    String webAppDir = "src/main/webapp/";
    WebAppContext webApp = new WebAppContext();
    webApp.setContextPath(CONTEXT_PATH);
    webApp.setResourceBase(webAppDir);
    webApp.setParentLoaderPriority(true);

    webApp.setInitParam(
        "org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");

    return webApp;
}

DefaultServlet will look for it's own copy of useFileMappedBuffer, which seems to be set deep inside of Jetty. But by prefixing the property name with as above, this value is preferred.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top