Maven - 查找来自哪个 jar 类

问题描述

我正在使用 maven 构建一个带有依赖项的 jar,当我运行该 jar 时出现错误 Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path,我从 pom.xml 中排除了所有 log4j-over-slf4j 依赖项,但仍然出现相同的错误。我尝试使用依赖关系树 mvn dependency:tree -Dverbose -pl myModule -am > dependencytree.log 但仍然无法弄清楚这些依赖关系来自哪里。我看到 stacktrace 中的 org.slf4j.impl.Log4jLoggerFactory 类正在抛出错误,有没有办法找出这个类的来源(哪个 jar)?

可能类似于 mvn dependency:tree -Dverbose -Dincludes=<classnamehere> -pl myModule -am > logsOfBuild.log

解决方法

试试这个:

String path = org.slf4j.impl.Log4jLoggerFactory.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

这将告诉您类所在的 jar 文件。

,

在命令行上你可以:

mvn dependency:tree

这是关于依赖项排除的链接:https://howtodoinjava.com/maven/maven-dependency-management/#dependency-exclusion

在 Eclipse 中,您有一个依赖层次结构。您可以在那里看到哪些依赖项包含在哪些其他 deoendency 中。

只需启动一个空的工作区。导入现有的 Maven 项目。双击您的 pom.xml,Eclipse 的内置 pom 编辑器应该在底部有选项卡。

这是一个链接:https://www.journaldev.com/33637/maven-dependency-tree-resolving-conflicts