5

我对耳朵文件有问题,无法在多个地方获取相同的库,因此会产生冲突。问题是我们使用了很多我们根本无法控制的 3:rd 方库。所以,我们最终到处都抛出了很多排除项,这对我来说似乎不对,这很容易出错,而且我们也没有在本地安装的 jboss 上检测到问题。

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

有没有更好的方法来处理这个问题?

4

1 回答 1

2

听起来您正在使用 maven 来构建您的工件?如果是这样,最好的办法是标签<exclusions>

使用它的mvn dependency:tree自由应用程序grep可以快速找到导致传递依赖的冲突版本的第 3 方工件。

我理解你对它的看法似乎不对,在一个完美的世界里,每个人都应该更好地为他们发布的工件编写 POM,但这是一个不完美的世界......我什至不确定它是否能完美地适用于所有人情况,也许对maven有更好了解的人可以详细说明。

在相同的工件存在于例如的情况下。两者都ear/lib/可以ear/webapp/WEB-INF/lib<scope>provided</scope>webapp 的 POM 中使用:

<dependency>
    <artifactId>spring-core</artifactId>
    ...
    <scope>provided</scope>
</dependency>

至少在 Weblogic 上,如果您将 jar 放在<earfile>/APP-INF/lib文件夹中,默认情况下这是有效的,对于其他 EE 容器,我相信您可以实现相同的添加

<application>
    <library-directory>APP-INF/lib</library-directory>
</application>

application.xml描述符。

我希望这会有所帮助。

干杯,

于 2013-02-01T13:09:07.543 回答