gpt4 book ai didi

java - Web服务器部署问题

转载 作者:行者123 更新时间:2023-12-01 13:38:36 24 4
gpt4 key购买 nike

我当前的项目正在用 Java 编写一个 HTTP-Webserver。服务器每两秒检查一次“部署目录”并搜索名为 content.jar 的文件。如果文件发生更改,服务器将部署它。该文件包含将由 URLClassLoader 加载的 servlet。每次部署时都会创建一个新的类加载器。

在另一个项目中,我正在开发 servlet。我编写了一个 Ant-buildfile,它创建 content.jar 文件并将其移动到服务器的部署目录中。不幸的是我收到了 Ant 错误:

BUILD FAILED [path]\WebServerServlet\Ant\Build.xml:15: Unable to remove existing file [path]\WebServer\web\content.jar

我认为该文件被 JVM 锁定在文件系统上 - 有没有办法告诉 Ant 它不应该尝试删除和移动该文件,而应该覆盖它?

否则,有谁知道如何通过更改我的部署系统来避免文件被 JVM 锁定?

编辑

我现在已经找到解决办法了!正如本文中讨论的question我唯一要补充的是

URLClassLoader loader = new URLClassLoader(..);
//class loading stuff here
loader.close() //the line all the trouble was about

通过这个附录,我的 Ant-buildfile 能够删除部署目录中的“旧”jar 并将新的 jar 移入其中。

最佳答案

我怀疑类加载器锁定了 jar。无论哪种方式,在锁被释放之前,您都将无法移动、删除或修改它。

解决方案是编写自己的类加载器。这个自定义类加载器应该监视您的 jar 的更改,而不是服务器,然后相应地重新加载类。

编写类加载器来进行动态重新加载涉及很多内容 - 幸运的是,它已经被解释了 here .

关于java - Web服务器部署问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21040219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com