我的ear文件有问题,要在几个地方获取相同的库,因此会产生冲突。问题是我们使用了很多我们根本无法控制的3:rd方库。因此,我们最终会在各处抛出大量的排除对我来说似乎不对,它有点容易出错,而且我们也没有在jboss的本地安装中发现问题。
所以,我想执行某种预包装步骤,只需删除重复的jar文件。如果部署在两个位置,请删除依赖项目中的那些。例如,jboss-seam.jar包含在我们使用的几个项目中。其中一些依赖项是通用的,包含在parent.pom中。一些依赖关系是特定于ejb或特定于Web的,因此包含在ejb和/或web项目中。在ear-file中,jboss-seam.jar包含在三个地方,并且是类加载器的混乱。所以应该有一些机制简单地检查一些简单的规则,如果在耳边,不应该在战争中,而不是必须创建带有排除的xml-hell。
有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
听起来你正在使用maven来制作你的工件?如果是这样,最佳追索权 <exclusions>
标记。
使用mvn dependency:tree
自由应用grep
,可以快速找到哪些第三方工件会导致传递依赖的冲突版本。
我理解你对它的看法看似不对,在一个完美的世界里,每个人都应该更好地为他们出版的文物写POM,但这是一个不完美的世界...我其实甚至不确定它是否能够在所有情况下都能完美地运作,也许对maven有更好了解的人可以详细说明。
在例如存在相同的工件的情况下。您可以在webapp的POM中使用ear/lib/
和ear/webapp/WEB-INF/lib
:
<scope>provided</scope>
至少在Weblogic上,如果你将jar放在<dependency>
<artifactId>spring-core</artifactId>
...
<scope>provided</scope>
</dependency>
文件夹中,默认情况下这是有效的,对于其他EE容器,我相信你可以实现相同的添加
<earfile>/APP-INF/lib
到<application>
<library-directory>APP-INF/lib</library-directory>
</application>
描述符。
我希望有所帮助。
干杯,