原创

查找包含指定类的所有Jar

温馨提示:
本文最后更新于 2022年11月17日,已超过 19 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

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来实例化类。

这两种方法都是有效的,但它们有自己的用例。

正文到此结束