我们在网络应用中使用第三方战争(战争)。为了与战争沟通,我们创建了一个桥模块(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构建过程实现这一目标,还是有更好的方法呢?
答案 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