2012-09-19 88 views
3

我的目標是在JBoss 7.1.1中部署ear文件。 ear文件中的一個類(我不能改變)是使用sun.net.util.IPAddressUtil類的JRE的rt.jarJBoss 7.1.1:將jre的rt.jar添加到classpath

在我的IDE(日蝕)解決這個類,它正常編譯。但是當我嘗試在JBoss 7.1.1上部署(包含類的耳朵)時,它給我java.lang.NoClassDefFoundError: sun/net/util/IPAddressUtilJAVA_HOME變量在我的機器設置和我看到JBoss和蝕兩者使用相同的JDK(1.6.x版)

當我在lib文件夾的rt.jar捆綁的耳朵時,EAR部署正確(這是一個不好的方法)。

我曾看過JBoss community,它說配置爲任何第三方jar的模塊。但是,我需要的類是在rt.jar中,我不贊成將其添加爲模塊的

是否有配置JBoss 7.1.1手動看%JAVA_HOME%/jre/lib/rt.jar的方法嗎?

在此先感謝。

+0

您看不到此類的原因是因爲它不是API的一部分。解決方法是修復你的代碼,不要使用'sun.net.util.IPAddressUtil'。不保證它在某個時候不會被刪除。 –

回答

10

JBoss 7使用jboss模塊技術進行模塊化類加載,類似於OSGi。 它將在其自己的lib目錄中使用rt.jar和一堆庫來啓動應用程序服務器本身。 但是,當它將加載您的Web應用程序時,它將根據它聲明的模塊依賴關係創建一個自定義類加載器,以限制它將看到的類。

要聲明模塊依賴關係,需要在EAR的META-INF目錄(或WAR的WEB-INF)中包含jboss-deployment-structure.xml。請參閱https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7。聲明對在rt.jar中的類存在依賴關係,你需要一個<系統>相關性:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
     <dependencies> 
      <system export="true"> 
       <paths> 
        <path name="sun/net/util"/> 
       </paths> 
      </system> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

您也可以嘗試提取IPAddressUtil類,並打包爲一個單獨的模塊。您可以從openjdk獲取源代碼,例如http://www.docjar.com/html/api/sun/net/util/IPAddressUtil.java.html

+2

只是有點評論,Jboss7不是基於OSGI的,但它支持osgi,它是基於jboss模塊的。 – ctomc

+0

最好更改指針,而不是更改捆綁。 – lwpro2

相關問題