java - 停止在 ear 文件中部署重复 jar 的策略

标签 java jakarta-ee package ear

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

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

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

最佳答案

听起来您正在使用 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描述符。

希望对您有所帮助。

干杯,

关于java - 停止在 ear 文件中部署重复 jar 的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643905/

相关文章:

java - Vaadin 7 子窗口按钮

java - 允许电子邮件交互 - Java 服务器

java - Android intentService 指南

lisp - 将包导入 SLIME REPL

java - 从 JavaScript 访问列表项

java - java 中 tiff 图像的平铺?或 libTiff 的 java 包装器?

java - org.hibernate.exception.JDBCConnectionException : Cannot open connection

java - Servlet 2.3规范中关于Websphere session 管理策略和 session 相关内容的一些疑问

ios - 如何在 Linux 上构建 Mac 包? (BOM文件问题)

python - 检查要求是否是最新的