概述
在本文中,我们将学习如何查找包含特定类的所有jar文件。我们将通过两种不同的方法来演示:命令行方式和程序方式。
2. 命令行方式
在这个方法中,我们将使用shell命令来识别本地Maven仓库中包含ObjectMapper
类的所有jar文件。首先,我们编写一个脚本来在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仓库上运行以下find
命令,配合findJar.sh
以获取结果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类来查找classpath中的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仓库中识别给定类。接着,在第二种方法中,我们学会了编写程序来从classpath中找到用于实例化类的jar文件。
这两种方法都很有效,但它们各自适用于不同的场景。