小编pec*_*cci的帖子

嵌入式码头不完全清除临时目录(保留 lib/*.jar)

我有一个使用嵌入式码头并且工作正常的应用程序。

我遇到了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:我不想停止服务器以便我可以删除文件夹。

提前致谢。

java jetty

4
推荐指数
1
解决办法
3482
查看次数

标签 统计

java ×1

jetty ×1