2011-11-17 56 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