![](/img/trans.png)
[英]how to make sure that the temporary jar file is accessible by the classloader
[英]In JBoss application server, how do I make sure that all modules in a deployment use the same Classloader for a jar library?
我有一个可部署到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中定义,战争图书馆使用它来访问我的数据库。 现在,我从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中的所有类?
事实证明这是一个相对简单的解决方案。 我通过添加scope
标签为模型依赖项provided
了一个值来修改webportal.war,restapi.war和dal.jar的pom.xml文件:
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.