我有一个使用嵌入式码头并且工作正常的应用程序。
我遇到了jetty 生成的临时目录的问题。部署应用程序时,它会生成一个带有提取的战争的临时目录(jetty-0.0.0.0-8888-app.war-_app-any-4643933123854766078.dir),一切都很好。但是当我用另一个版本(相同的上下文)删除/替换这个战争时,它会创建另一个临时目录,另一个没有被完全删除。我看到 jetty 删除了所有 css、html 文件,但没有删除 web-inf/lib/*.jar。
该webAppContext.setPersistTempDirectory设置为false,我已经选中。
我已经尝试更改 jetty 使用的临时目录。
这是我的 WebAppProvider:
WebAppProvider webAppProvider = new WebAppProvider();
webAppProvider.setMonitoredDirName("webapps");
webAppProvider.setScanInterval(1);
webAppProvider.setExtractWars(true);
webAppProvider.setDefaultsDescriptor("webdefault.xml");
webAppProvider.setTempDir(new File("work"));
String webDefault = Thread.currentThread().getContextClassLoader().getResource("webdefault.xml").getPath();
if (webDefault != null) {
File f = new File(webDefault);
if (f.exists() && !f.isDirectory()) {
webAppProvider.setDefaultsDescriptor(webDefault);
}
}
Run Code Online (Sandbox Code Playgroud)
这是部署管理器:
DeploymentManager deploymentManager = new DeploymentManager();
deploymentManager.setContexts(contextHandlerCollection);
deploymentManager.setContextAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/org.apache.taglibs.taglibs-standard-impl-.*\\.jar$");
deploymentManager.addAppProvider(webAppProvider);
Run Code Online (Sandbox Code Playgroud)
服务器设置:
server = new Server(8888);
server.setStopAtShutdown(true);
server.setStopTimeout(5000);
handlerCollection.addHandler(contextHandlerCollection);
handlerCollection.addHandler(new DefaultHandler());
server.setHandler(handlerCollection);
server.addBean(deployManager);
Run Code Online (Sandbox Code Playgroud)
我注意到我只能在停止 jetty 时手动删除目录。我认为这是释放使用罐子的过程并让我完全删除的唯一方法。
Obs:我不想停止服务器以便我可以删除文件夹。
提前致谢。