【发布时间】:2014-01-10 09:15:05
【问题描述】:
我目前的项目是用 Java 编写一个 HTTP-Webserver。服务器每两秒检查一次“部署目录”并搜索名为content.jar 的文件。如果文件被更改,服务器会部署它。该文件包含将由URLClassLoader 加载的servlet。每次部署都会创建一个新的类加载器。
在另一个项目中,我的 servlet 正在开发中。我编写了一个 Ant-buildfile,它创建了 content.jar 文件并将其移动到服务器的部署目录中。不幸的是,我收到了 Ant 错误:
构建失败 [路径]\WebServerServlet\Ant\Build.xml:15: 无法 删除现有文件 [路径]\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 移入其中。
【问题讨论】:
标签: java deployment ant locking webserver