Linux cmd to search for a class file among jars irrespective of jar path

前端 未结 8 933
灰色年华
灰色年华 2021-01-29 23:58

I want to search for a particular class file among many jar files without giving the location of each jar file.

Is this possible with a simple command?

I tried t

8条回答
  •  忘了有多久
    2021-01-30 00:45

    Linux, Walkthrough to find a class file among many jars.

    Go to the directory that contains the jars underneath.

    eric@dev /home/el/kafka_2.10-0.8.1.1/libs $ ls
    blah.txt                             metrics-core-2.2.0.jar
    jopt-simple-3.2.jar                  scala-library-2.10.1.jar
    kafka_2.10-0.8.1.1-sources.jar       zkclient-0.3.jar
    kafka_2.10-0.8.1.1-sources.jar.asc   zookeeper-3.3.4.jar
    log4j-1.2.15.jar
    

    I'm looking for which jar provides for the Producer class.

    Understand how the for loop works:

    eric@dev /home/el/kafka_2.10-0.8.1.1/libs $ for i in `seq 1 3`; do
    > echo $i
    > done
    1
    2
    3
    

    Understand why find this works:

    eric@dev /home/el/kafka_2.10-0.8.1.1/libs $ find . -name "*.jar"
    ./slf4j-api-1.7.2.jar
    ./zookeeper-3.3.4.jar
    ./kafka_2.10-0.8.1.1-javadoc.jar
    ./slf4j-1.7.7/osgi-over-slf4j-1.7.7-sources.jar
    

    You can pump all the jars underneath into the for loop:

    eric@dev /home/el/kafka_2.10-0.8.1.1/libs $ for i in `find . -name "*.jar"`; do
    > echo $i
    > done
    
    ./slf4j-api-1.7.2.jar
    ./zookeeper-3.3.4.jar
    ./kafka_2.10-0.8.1.1-javadoc.jar
    ./kafka_2.10-0.8.1.1-sources.jar
    

    Now we can operate on each one:

    Do a jar tf on every jar and cram it into blah.txt:

    for i in `find . -name "*.jar"`; do echo $i; jar tf $i; done > blah.txt
    

    Inspect blah.txt, it's a list of all the classes in all the jars. You can search that file for the class you want, then look for the jar that came before it, that's the one you want.

提交回复
热议问题