2011-11-17 35 views
1

我們在我們的web應用(戰爭)中使用第三方戰爭。爲了與戰爭溝通,我們創建了一個橋樑模塊(jar)。其目的是防止我們的網絡應用程序直接與外部戰爭進行通信,而是通過網橋模塊進行通信。如何使用maven公開內部戰爭中的WEB-INF/lib

所有3個模塊(2個戰爭和1個jar)都在JBoss中部署的ear文件中。

ear 
    - war1 (our web app) 
    - war2 (external web app) 
    - bridge jar 

點要注意的是,橋罐子使用一些API(公開爲罐),其存在於外部戰爭的WEB-INF/lib目錄內。

在調出JBoss的時候,我們得到了java.lang.NoClassDefFoundError錯誤,因爲bridge jar無法找到外部war的WEB-INF/lib中存在的API。

我們不想將所有外部罐子直接放在耳朵下面,因爲這意味着外部罐子並不僅限於其戰爭。

有沒有辦法從橋樑罐子裏訪問外部戰爭的WEB-INF/lib中存在的罐子?我們可以使用maven構建過程來實現這一點,還是有更好的方法呢?

回答

1

最近我們遇到了類似的問題,我們的罐子無法看到其他罐子。

一)如果橋罐子的pom.xml已經WAR1和WAR2定義爲:通過使用「橋罐​​子」

2的方式來做到這一點的pom.xml中定義的maven-ejb-plugin創建manifest.mf解決它依賴 - 然後用maven-EJB-插件與

<configuration> 
      <ejbVersion>3.0</ejbVersion> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
      </manifest> 
     </archive> 

     </configuration> 

這應該自動生成MANIFEST.MF有匹配的Classpath在POM

b)中定義的所有其他依賴性,用正確定義自己的MANIFEST.MF耳鼻喉科里斯您需要並指向它像這樣

<configuration> 
      <ejbVersion>3.0</ejbVersion> 
      <archive> 
      <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 

     </configuration> 

因爲你的罐子在WAR1的WEB-INF/lib下,我覺得你應該去選擇2含直接輸入如

一個清單

Class-Path: WEB-INF/lib/some-external.jar

+0

我們修改了bridge jar中的MANIFEST.MF文件,添加了包含我們需要的外部jar的Class-Path條目。 MANIFEST.MF文件如下: Manifest-Version:1.0 Ant-Version:Apache Ant 1.5.3 Package:com.ket.sa Class-Path:WEB-INF/lib/WebObjects-9.2.1的.jar 規格 - 標題:標題 規範廠商: 實現-標題:com.ket.sa 實現廠商: 的實現版本:7.6 但它無法找到上述罐子。這是做到這一點的正確方法嗎? – Sundeep

+0

看起來不錯,不知道這是一個JBoss問題https://issues.jboss.org/browse/JBAS-3883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel另見http:/ /docs.codehaus.org/display/MAVENUSER/Solving+the+Skinny+Wars+problem – JoseK