查找包含指定类的所有Jar
温馨提示:
本文最后更新于 2022年11月17日,已超过 735 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1.引言
在本文中,我们将学习查找包含特定类的所有jar。我们将使用两种不同的方法来演示这一点,即基于命令的方法和基于程序的方法。
2.基于命令
在这种方法中,我们将使用shell命令来标识本地maven存储库中具有 对象映射器 班让我们先编写一个脚本来标识jar中的类。脚本使用 jar 和 grep 命令打印符合的jar:
jar -tf $1 | grep $2 && echo "Found in : $1"
这里$1是jar文件路径,$2是类名。类名将始终为 com.fasterxml.jackson.databind.ObjectMapper对于这种情况。让我们将上述命令保存在bash文件中 findJar.sh。之后,本地maven存储库上, 我们将运行以下findJar.sh 的 find 命令去找到的Jar:
$ find ~/.m2/repository -type f -name '*.jar' -exec ./findJar.sh {} com.fasterxml.jackson.databind.ObjectMapper \;
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper$1.class
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper$2.class
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper$3.class
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class
com/spotify/docker/client/shaded/com/fasterxml/jackson/databind/ObjectMapper.class
Found in : <strong>/home/user/.m2/repository/com/spotify/docker-client/8.16.0/docker-client-8.16.0-shaded.jar</strong>
com/fasterxml/jackson/databind/ObjectMapper$1.class
com/fasterxml/jackson/databind/ObjectMapper$2.class
com/fasterxml/jackson/databind/ObjectMapper$3.class
com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class
com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class
com/fasterxml/jackson/databind/ObjectMapper.class
Found in : <strong>/home/user/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.3/jackson-databind-2.12.3.jar</strong>
3.基于程序
在基于程序的方法中, 我们将编写一个Java类来查找 ObjectMapper类。 我们可以显示如下程序所示的jar:
public class App {
public static void main(String[] args) {
Class klass = ObjectMapper.class;
URL path = klass.getProtectionDomain().getCodeSource().getLocation();
System.out.println(path);
}
}
输出:
file:/Users/home/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.3/jackson-databind-2.12.3.jar
在这里,我们可以看到 Class 类有 getProtectionDomain().getCodeSource().getLocation()方法,此方法提供所需类所在的jar文件。因此,我们可以使用它来获取具有类的jar文件。
4.结论
在本文中,我们学习了从jar列表中查找类的基于命令和程序的方法。
首先,我们从一个示例开始。之后,我们探索了一种基于命令的方法来从本地maven存储库中识别给定的类。然后,在第二种方法中,我们学习编写一个程序,从类路径中查找运行时使用的jar来实例化类。
这两种方法都是有效的,但它们有自己的用例。
正文到此结束
- 本文标签: Java
- 本文链接: https://www.v8en.com/article/291
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权