我有一个可部署的耳朵,我正在部署到JBoss应用程序服务器。我正在重构我的代码,以便我的实体类在一个单独的jar库中声明,可以由耳中的不同模块共享。
但是,我现在收到以下错误:
java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase
EntityBase
是一个公共抽象类。 Project
是一个扩展EntityBase
的公共类。这两个类都已移到我的新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中的所有类都加载了相同的类加载器?
答案 0 :(得分:1)
事实证明这是一个相对简单的解决方案。我修改了webportal.war,restapi.war和dal.jar的pom.xml文件,为模型依赖项添加了值为scope
的{{1}}标记:
provided
然后,我通过向model.jar添加一个没有scope标记的依赖项来修改myapp.ear的pom.xml(这将为依赖项提供默认范围,我认为是<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
):
compile