• find-a-jar-file-given-the-class-name


    Save this as findclass.sh (or whatever), put it on your path and make it executable:

    #!/bin/sh
    find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' ;
    

    The first parameter is the directory to search recursively and the second parameter is a regular expression (typically just a simple class name) to search for.

    $ findclass.sh . WSSubject
    

    The script relies on the -t option to the jar command (which lists the contents) and greps each table of contents, labelling any matches with the path of the JAR file in which it was found.

    I have written a program for this: https://github.com/javalite/jar-explorer It will also decompile existing byte code to show you interfaces, methods, super classes, will show contents of other resources - text, images, html, etc.

    There is no "official" Java way to do this AFAIK.

    The way I usually hunt for it is to use find and jar to look through all jar files in a given tree.

    > find . -name *.jar -print -exec jar tf {} oracle/sql/BLOB.class ;
    ./v2.6.1/lib/csw_library.jar
    ./v2.6.1/lib/oracle_drivers_12_01.jar
    oracle/sql/BLOB.class
    

    If you're on Windows and don't want to install Cygwin, then I suppose you would have to write a batch script to locate the jar files.

    If the grep on your system (e.g. Solaris) doesn't have -H and --label as used in Dan Dyer's example, you can use:

    find . -name '*.jar' -type f | xargs -i bash -c "jar -tvf {}| tr / . | grep WSSubject && echo {}"
    $ find . -iname *.jar | while read JARF; do jar tvf $JARF | grep Log.class && echo $JARF ; done
    479 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/Log.class
    3714 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/Log4JCategoryLog.class
    1963 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/NoOpLog.class
    9065 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/SimpleLog.class
    ./WebContent/WEB-INF/lib/commons-logging.jar

    In Windows, run cmd.exe and type:

      for %i in (*.jar) do @jar tvf %i | find "/com/company/MyClass.class"
    

    The jars would have to be in the current directory. For also has a /R option which takes a directory and lets you search recursively.

    If Jar.exe isn't in your path, you can do something like @C:jdkinjar.exe.

    You could try services like:

    Or

    Or

    • A maven enterprise repository with a search feature e.g. Nexus (OFC, this would only work if the jars you're looking for are indexed i.e. installed in the repository)

    Printing the list as I go so I can see what I'm checking. Mostly I'm looking in a lib/app directory, but you can substitute a locate for the find.

    e.g.

    for jar in $(find some_dir/lib -name "*.jar" ); 
    do
    echo -------------$jar-------------------
    jar -tf $jar | grep TheNameOfTheClassImLookingFor
    done


    http://stackoverflow.com/questions/1500141/find-a-jar-file-given-the-class-name

  • 相关阅读:
    web页面接入QQ客服的方法
    如何使用webapi集成swagger
    TCP的三次握手和四次挥手
    笔记-ASP.NET WebApi
    .net开发人员应该知道的几个网站
    HttpClient在async中产生的代码不执行和堵塞
    【转】CA证书申请+IIS配置HTTPS+默认访问https路径
    WebApi捕捉异常的一套方案
    使用Topshelf部署你的Job
    使用ajax局部更新Razor页面
  • 原文地址:https://www.cnblogs.com/softidea/p/5548731.html
Copyright © 2020-2023  润新知