gpt4 book ai didi

java - 在 JBoss 应用程序服务器中,如何确保部署中的所有模块对 jar 库使用相同的类加载器?

转载 作者:行者123 更新时间:2023-11-30 07:44:56 27 4
gpt4 key购买 nike

我有一个可部署的耳朵,我正在将其部署到 JBoss 应用程序服务器。我正在重构我的代码,以便我的实体类在一个单独的 jar 库中声明,该库可以由 Ear 中的不同模块共享。

但是,我现在收到以下错误:

java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase

EntityBase 是一个公共(public)抽象类。 Project 是一个扩展 EntityBase 的公共(public)类。这两个类都已移至我的新 jar 库。这个错误让我得出结论:类加载器存在问题。

我的耳朵结构如下:

myapp.ear
|
|--- webportal.war
|--- restapi.war
|--- dal.jar

我的实体已在 dal.jar 中定义,war 库使用它来访问我的数据库。我现在已从 dal.jar 中删除了实体,并将它们放入单独的 model.jar 中。我已将 model.jar 列为 myapp.ear 的 pom.xml 中的依赖项。它还在 webportal.war、restapi.war 和 dal.jar 的 pom.xml 文件中列为依赖项。因此,model.jar 现在部署在 myapp.ear 内的 lib 目录中。

我对 ClassCastException 原因的理解是否正确?如果是这样,我如何打包我的应用程序以确保 model.jar 中的所有类都使用相同的类加载器加载?

最佳答案

事实证明这是一个相对简单的解决方案。我修改了 webportal.war、restapi.war 和 dal.jar 的 pom.xml 文件,为模型依赖项添加了值为 providedscope 标记:

<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

然后,我通过向 model.jar 添加不带范围标记的依赖项来修改 myapp.ear 的 pom.xml(这将为依赖项提供默认范围,我认为是 compile):

<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

关于java - 在 JBoss 应用程序服务器中,如何确保部署中的所有模块对 jar 库使用相同的类加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071277/

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