我正在尝试向现有EAR添加自包含WAR。鉴于我的新WAR有一些更新的库,我想不惜一切代价确保与我的EAR中存在的任何现有库没有冲突。
目前,我的EAR结构为:
EAR:
- webapp1.war
- ejb.jar
- lib/lib1.jar
/lib2.jar
/lib3.jar
- webapp2.war <-- the new self-contained war
为了限制任何潜在的冲突,我将我的webapp2.war
打包为一个完全自包含的WAR,其所有依赖项都在WEB-INF / lib文件夹中。但更确切地说,我想将webapp2的类加载器限制为其WEB-INF / classes和WEB-INF / lib文件夹。
我找到了Wildfly的this classloading reference,但我在文档中找到的唯一内容是exclude-subsystems
标记:
的JBoss部署-structure.xml:
<jboss-deployment-structure>
<sub-deployment name="myapp.war">
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
但我读到这意味着我需要为ear / lib文件夹中的每个lib(即:module)创建一个新的子系统条目。哪个不太容易管理。另外,我甚至没有100%清楚模块名称应该是什么?
有没有办法简单地告诉类加载器忽略EAR / lib文件夹中的所有模块/库?是否有一个maven插件我可以用来为我自动生成这个?
答案 0 :(得分:1)
最简单的方法是单独部署WAR。
如果你真的需要这样做,那么只需在EAR中加入WAR即可正常工作。
除了Java EE / SE规范提供的API之外,在类加载器查看EAR和其他地方之前,将始终看到WAR文件的WEB-INF / lib(和类)目录中的所有其他内容。这是规范要求。
如果你忘记了一个图书馆并且从EAR中挑选了一个班级,事情会变得混乱。该类可能返回一个引用您的一个重复库的对象,从而导致奇怪的类访问问题。