![](/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.