停止在ear-file中部署重复jar的策略

时间:2013-02-01 10:09:41

标签: java java-ee package ear

我的ear文件有问题,要在几个地方获取相同的库,因此会产生冲突。问题是我们使用了很多我们根本无法控制的3:rd方库。因此,我们最终会在各处抛出大量的排除对我来说似乎不对,它有点容易出错,而且我们也没有在jboss的本地安装中发现问题。

所以,我想执行某种预包装步骤,只需删除重复的jar文件。如果部署在两个位置,请删除依赖项目中的那些。例如,jboss-seam.jar包含在我们使用的几个项目中。其中一些依赖项是通用的,包含在parent.pom中。一些依赖关系是特定于ejb或特定于Web的,因此包含在ejb和/或web项目中。在ear-file中,jboss-seam.jar包含在三个地方,并且是类加载器的混乱。所以应该有一些机制简单地检查一些简单的规则,如果在耳边,不应该在战争中,而不是必须创建带有排除的xml-hell。

有没有更好的方法来解决这个问题?

1 个答案:

答案 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> 描述符。

我希望有所帮助。

干杯,