【问题标题】:Webserver deployment issue网络服务器部署问题
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2019-04-30
      • 2013-08-29
      • 2021-10-04
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多