【发布时间】:2017-11-20 14:53:36
【问题描述】:
对不起,我的新手问题。
假设我有一个包 A,例如,它在其 maven 文件中声明 B、C 作为其依赖项。 B、C 使用两个不同版本的 log4j 进行日志记录。我有几个问题:
- 如果我使用 maven,并将 B、C 声明为 A 的依赖项。当 maven 从 mavencentral repo 拉入 B、C 的工件 (.jar) 时。 B、C jar 文件是否包含 log4j 类文件或仅包含它们自己的编译文件(B、C 自己的源代码,而不是依赖项)。
- 如果我理解正确的话,当构建发生时,最终构建中只会有一个 log4j 类文件(即使 B、C 使用不同版本的 log4j)。这里要选择哪个版本的 log4j 构建?这是否意味着我也需要将 log4j 声明为 A 依赖项(在 A 的 maven 构建文件中) - 并且该版本将被选择构建版本。
- B、C 可能使用完全不同的 log4j 版本。那里的 API 可能完全不同。它应该在运行时引起问题吗?但在现实中,它非常罕见吗?为什么这样?
谢谢。
【问题讨论】:
-
Maven 假设总是可以使用新版本的工件而不是旧版本。如果没有,您需要开始在依赖项中使用 exclude。