在 Maven 项目中查找包含 class 文件的 jar

Find jars containing a class file in Maven project

正如 header 所说,我想知道 Maven 中是否有这样的机会来了解模块中加载 class 文件的 jar。就像 dependency:tree,但我希望看到带有特定 class 文件的 jar。谢谢!

据我所知,没有特定的 Maven 插件 (3.0+) 可以搜索 class 声明的依赖项。但是,我相信我了解您的需求并提供以下解决方案:

查找重复声明

mvn dependency:analyze-duplicate -DcheckDuplicateClasses

在 Eclipse 中查找包含 JAR

使用CTRL+SHIFT+T调出打开类型 对话框。输入部分或整个 class 名称会显示构建 class 路径中包含 JAR 的列表。

查找包含不包含 IDE

的 JAR

如果需要更多程序控制来检查没有 IDE 的系统,例如 CI 服务器,则可以使用以下代码片段列出包含特定 class 的 JAR 文件甚至特定的名称模式。这种方法使用 Maven 的依赖插件将所有依赖项收集到一个临时目录中,以便于搜索它们。

对于 Unix 或 Git Bash 系统

mvn clean dependency:copy-dependencies -DoutputDirectory=target/temp
for j in target/temp/*.jar; do jar -tf $j | grep SomeClass && echo $j; done

对于 Windows 通过 cmd shell

mvn clean dependency:copy-dependencies -DoutputDirectory=target/temp
for /R %G in (target\temp\*.jar) do @jar -tf "%G" | find "SomeClass" && echo %G

在任何一种情况下,都会显示匹配条目的完整包和 class 名称,后跟包含的 JAR 文件名。 grepfind 搜索参数可以进一步细化以根据需要限制匹配,例如 SomeClass.class.

希望对您有所帮助。