Java >> Java tutorial >  >> Tag >> class

Find alle krukker, der indeholder en given klasse

1. Introduktion

I denne artikel lærer vi at finde alle de krukker, der indeholder en bestemt klasse. Vi vil demonstrere dette ved hjælp af to forskellige tilgange, nemlig kommandobaseret og programbaseret.

2. Kommandobaseret

I denne tilgang vil vi bruge shell-kommandoen til at identificere alle krukkerne i det lokale maven-lager, der har ObjectMapper klasse. Lad os starte med at skrive et script for at identificere klassen i en krukke. Scriptet bruger jar og grep kommando for at udskrive den relevante krukke:

jar -tf $1 | grep $2 && echo "Found in : $1"

Her er $1 jar-filstien, og $2 er klassenavnet. Klassenavnet vil altid være com.fasterxml.jackson.databind.ObjectMapper for dette scenarie. Lad os gemme ovenstående kommando i en bash-fil findJar.sh . Derefter kører vi følgende find kommando på det lokale maven-lager med findJar.sh for at få de resulterende krukker:

$ 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. Programbaseret

I den programbaserede tilgang skriver vi en Java-klasse for at finde ObjectMapper klasse i java-klassestien. Vi kan vise krukken som vist nedenfor program:

public class App { 
    public static void main(String[] args) { 
        Class klass = ObjectMapper.class; 
        URL path = klass.getProtectionDomain().getCodeSource().getLocation(); 
        System.out.println(path); 
    } 
}

Output:

file:/Users/home/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.12.3/jackson-databind-2.12.3.jar

Her ser vi alle klasser klasse har getProtectionDomain().getCodeSource().getLocation() . Denne metode giver jar-filen, hvor den ønskede klasse findes. Derfor kan vi bruge det til at få jar-filen med klassen.

4. Konklusion

I denne artikel har vi lært kommando- og programbaserede tilgange til at finde klasser fra jars-listen.

Først startede vi med et illustrativt eksempel. Derefter udforskede vi en kommandobaseret tilgang til at identificere en given klasse fra det lokale maven-lager. Og så, i den anden tilgang, lærte vi at skrive et program til at finde den jar, der bruges i runtime fra klassestien for at instansiere klassen.

Begge metoder er effektive, men de har deres egen use case.


Java tag