gpt4 book ai didi

java - 将类从 WAR 移动到 JAR 时出现 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-28 23:46:23 25 4
gpt4 key购买 nike

我正在尝试以允许我将 Quartz 作业动态添加到类路径的方式部署动态 Web 项目。这是我的想法。

'如果我从包含完全限定类路径的 XML 文件中读取配置,然后在类中使用 Class.forName() 从配置 XML 创建所述类的实例,那么我应该能够访问动态添加的类放在Tomcats的TOMCAT_HOME/lib目录下'。

在此更新之前,应用程序运行良好,但我在 war 中包含了这些新的外部化类。但是,我不能再这样做了,因为我:

  1. 不想每次需要新工作时都重新部署 war 。
  2. 无法关闭服务器以添加新作业,因为有些作业需要持续运行。

但是,当我运行 class.forName() 方法时,我收到了 NoClassDefFoundError。我已经在catalina.properties中验证过Tomcat中的lib目录在common.loader属性中。

我的问题是,如何让我的 WAR 类识别 Tomcat 公共(public)库中 jar 中的类。有任何想法吗?谢谢。

补充:

@BalusC:我实际上已经开发了一个基于 Web 的管理屏幕,允许用户编辑 XML 配置文件以添加新作业。但是,不仅要添加作业的另一个实例,而且要添加一个全新的作业,需要有这个新作业的代码定义。我希望将其放入一个 jar 文件中,然后放入 tomcat lib 目录中,以供 class.forName() 获取。

最佳答案

希望 Tomcat 不会自动重新加载您的上下文或自动在您的类加载器中加载 jar。这可能会导致无法控制的行为。

如果不通过 URLClassLoader 显式加载 jar,您将永远无法访问 WebAppClassLoader(每个 tomcat 上下文管理的类)中的那些新类。我建议使用 jar 的绝对路径。由于一些不为人知的原因,我在相对路径方面遇到了问题。

如果您想知道 tomcat 安装路径,例如 lib 目录,您可以使用 catalina.homecatalina.base 环境变量。

关于java - 将类从 WAR 移动到 JAR 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807306/

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