如何使用maven在战争中暴露WEB-INF / lib

时间:2011-11-17 11:35:58

标签: maven jboss jar war ear

我们在网络应用中使用第三方战争(战争)。为了与战争沟通,我们创建了一个桥模块(jar)。目的是防止我们的Web应用程序直接与外部战争通信,而是通过桥接模块进行通信。

所有3个模块(2个战争和1个jar)都在一个部署在JBoss中的ear文件中。

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

需要注意的是,桥接jar使用了一些API(暴露为jar),这些API存在于外部战争的WEB-INF / lib目录中。

在启动JBoss时,我们得到java.lang.NoClassDefFoundError错误,因为桥接器jar无法找到外部war的WEB-INF / lib中存在的API。

我们不希望将所有外部罐子直接放在耳朵下,因为这意味着外部罐子不仅仅局限于它的战争中。

有没有办法从桥接器罐中访问外部战争的WEB-INF / lib中存在的jar?我们可以使用maven构建过程实现这一目标,还是有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

我们最近遇到了类似的问题,我们的罐子里看不到其他罐子。通过使用“bridge jar”的pom.xml中定义的manifest.mf创建maven-ejb-plugin来解决它

2种方法:

a)如果bridge jar的pom.xml已经将war1和war2定义为依赖 - 那么使用maven-ejb-plugin和

<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>

由于你的jar在war1的WEB-INF / lib中,我认为你应该选择包含直接条目的清单(如

)的选项2

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