在Maven项目中查找包含类文件的JAR包

13

正如标题所述,我想知道在Maven中是否有这样的机会可以了解模块中加载类文件的jar。就像dependency:tree一样,但我想看到具有特定类文件的jar。谢谢!


1
在Maven中央仓库,您可以通过http://search.maven.org/#advancedsearch%7Cgav进行搜索,或者您是在谈论您的本地缓存$HOME/.m2/repository还是在存储库管理器内? - khmarbaise
@khmarbaise 我在谈论的是当你有一个多模块的Maven项目,并且你想要搜索项目依赖的所有jar包中可能存在的特定类文件的所有可能位置的情况。所以我猜它应该加载所有的jar包并进行搜索,如果可能的话。 - Dmitry Senkovich
我会在这种情况下使用我的集成开发环境吗? - khmarbaise
@khmarbaise,我想我的问题表述得太差了,抱歉。但是是的,Intellij IDEA可以做这种事情,谢谢。 - Dmitry Senkovich
1个回答

14
据我所知,目前没有特定的Maven插件(3.0+)可以搜索依赖项中的类声明。然而,我理解您的需求并提供以下解决方案:
查找重复声明
mvn dependency:analyze-duplicate -DcheckDuplicateClasses

在Eclipse中查找包含JAR文件

使用CTRL+SHIFT+T打开打开类型对话框。输入部分或整个类名,将显示构建类路径中包含JAR文件的列表。

在没有IDE的情况下查找包含JAR文件

如果需要在没有IDE的系统上进行程序控制,例如CI服务器,则可以使用以下代码片段列出包含特定类甚至特定名称模式的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

无论哪种情况,都会显示匹配条目的完整包和类名,后面是所包含的JAR文件名。可以进一步细化grepfind搜索参数以根据需要限制匹配项,例如SomeClass.class。希望这能有所帮助。

我找寻的东西就是我自己。谢谢! - Dmitry Senkovich
@PhilipRego -- 错误信息告诉你所有需要知道的内容。上面的命令是Maven命令,需要一个Maven项目;换句话说,需要存在pom.xml文件。如果你有一个Maven项目,请确保在项目目录中运行这些命令。 - Frelling
"for j in target..." - 传说。 - mxl_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接