有没有朋友可以帮忙写个判断 java class 是在的哪个 jar 包中的程序? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容 #Wrapper { background-color: #e2e2e2; background-image: url("/static/img/shadow_light.png"), url("//cdn.v2ex.com/assets/bgs/circuit.png"); background-repeat: repeat-x, repeat-x; } #Wrapper.Night { background-color: #1f2e3d; background-image: url("/static/img/shadow.png"), url("//cdn.v2ex.com/assets/bgs/circuit_night.png"); background-repeat: repeat-x, repeat-x; background-size: 20px 20px, 162.5px 162.5px; }
mikemikemike
V2EX    程序员

有没有朋友可以帮忙写个判断 java class 是在的哪个 jar 包中的程序?

  •  
  •   mikemikemike 2015-02-04 10:49:29 +08:00 8006 次点击
    这是一个创建于 3909 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有朋友可以帮忙写个判断java class是在的哪个jar包中的程序?

    工作要用到,java不熟练,但想请个写。
    28 条回复    2015-02-12 23:04:58 +08:00
    mikemikemike
        1
    mikemikemike  
    OP
       2015-02-04 10:52:50 +08:00
    这里能找到这样的合作朋友不?
    exch4nge
        2
    exch4nge  
       2015-02-04 11:06:49 +08:00
    可以不用java写。.jar文件可以当做zip压缩包,看看对应目录里有没有那个名字的xxx.class就好了。


    (任何语言)用zip库遍历一下每个.jar文件的目录,查看是否存在对应路径上的.class文件即可。

    哦,有可能遇到一个类在多个jar包的情况,这种情况我就不知道了……
    lxrabbit
        3
    lxrabbit  
       2015-02-04 11:08:54 +08:00
    jar -xvf xxx.jar 不是应该这样解包的么
    libo26
        4
    libo26  
       2015-02-04 11:34:43 +08:00
    研究下jar命令吧
    nesuk
        5
    nesuk  
       2015-02-04 11:36:22 +08:00
    好像有一个开源的组件(好像名字是WhichJar?),可以自动识别Class加载自哪个Jar。
    nesuk
        6
    nesuk  
       2015-02-04 11:36:41 +08:00
    Fancye
        7
    Fancye  
       2015-02-04 11:40:03 +08:00
    java
    Class clazz = String.class;
    Package p = clazz.getPackage();
    System.out.println(p.getName());
    ```

    Hope that helps!
    mgcnrx11
        8
    mgcnrx11  
       2015-02-04 12:00:35 +08:00
    @Fancye 这不就是最好答案了么,反射一下
    ledkk
        9
    ledkk  
       2015-02-04 12:15:31 +08:00
    java -verbose:class 这个会自己打印加载类所在的jar包路径的
    vjnjc
        10
    vjnjc  
       2015-02-04 13:06:56 +08:00
    @Fancye 我感觉不是这样的,这样只会打印出他的packname而不会说是哪个jar包。

    比如apache的httpclient,代码只能打印出org.apache.http.client,而事实上楼主要的是android.jar(没错,httpclient是android build-in的包)。

    坦白说我不会,记忆里class loaded后只能获得他的packagename,不知道它的jar包名,坐等高手。
    如果楼主执意需要的话可以求助于IDE,eclipse和idea都有找出当前class位于×.jar的功能
    tension2012
        11
    tension2012  
       2015-02-04 13:10:35 +08:00
    grep javax/xml/soap/MessageFactory `find . -name *.jar`
    langxuan
        12
    langxuan  
       2015-02-04 13:17:24 +08:00
    @Fancye 这个前提是已经有这个jar包了
    sinsin
        13
    sinsin  
       2015-02-04 13:24:32 +08:00
    难道不是要分两种情况看么233
    * 运行时的情况:检查ClassLoader已经加载了的类使用反射可以做到,比如-verbose:class是会显示所在jar的;slf4j-logback输出的日志也有显示所在jar这功能。如果都还没加载,或者同名class在多个jar中存在,那些没加载的自然不会“出现”。
    * 静态的情况:在一堆jar或src目录中搜索某个ClassName在哪里存在,那就是IDE或zip工具能做到的事。有个GUI小工具JarIndexer也可以做到。
    Fancye
        14
    Fancye  
       2015-02-04 13:53:17 +08:00
    Addtion:
    ```java
    Class clazz = String.class;
    ProtetionDomain pd = clazz.getProtectionDomain();
    System.out.println(pd.getCodeSource().getLocation());
    ```

    Hope that helps!
    Fancye
        15
    Fancye  
       2015-02-04 13:54:15 +08:00
    stdout:
    ```
    file:/E:/Workspaces/MyEclipse%20Professional%202014/tcs/lib/redstone.jar
    ```
    Fancye
        16
    Fancye  
       2015-02-04 13:55:05 +08:00
    Sorry ,my class is XmlRpcClient!
    mikemikemike
        17
    mikemikemike  
    OP
       2015-02-04 16:05:54 +08:00
    @exch4nge
    @Fancye
    @sinsin
    @langxuan
    @tension2012
    @vjnjc
    @ledkk
    @mgcnrx11
    @Fancye
    @nesuk
    @lxrabbit
    小技量就不提了,你们比我熟悉,一批jar包下的位置,有只知道一个class名称,但要在这大批量的jar中找到是属于哪个jar的,写成一个jar包的形式让我调用,你们明白的吧?我不会写,你们试试?
    vjnjc
        18
    vjnjc  
       2015-02-04 16:18:25 +08:00
    这种啊。。。貌似是用zip遍历。。。
    同等高手
    ericliuhe
        19
    ericliuhe  
       2015-02-04 18:47:38 +08:00 via iPhone
    clazz.getResourceAsURL(clazz.getSimpleName() + ".class")
    手机打字,方法名可能有点出入,自己纠正
    把结果打印出来你就懂了
    yorkw
        20
    yorkw  
       2015-02-04 18:58:26 +08:00
    如果是那些常用的第三方库,直接:

    http://www.findjar.com/index.x
    sinsin
        21
    sinsin  
       2015-02-04 19:05:13 +08:00
    @mikemikemike 原来是伸手党啊。。。233
    你的需求并不明确,我们不会去试试。这问题里各种工具的作者都跑进去回了,自己找合适的吧。
    http://stackoverflow.com/questions/1342894/find-a-class-somewhere-inside-dozens-of-jar-files
    mikemikemike
        22
    mikemikemike  
    OP
       2015-02-04 22:26:18 +08:00
    @ericliuhe
    @sinsin
    我不懂,我只是单纯的想让你们给我写一个,然后我支付宝转你账。。。
    被你们误解了,唉。
    fxbird
        23
    fxbird  
       2015-02-04 22:31:00 +08:00
    @mikemikemike how much?我写过
    KentY
        24
    KentY  
       2015-02-05 05:59:04 +08:00
    你交代的不明白,你vm里load了一个class,你想知道这个class来自哪个jar? 还是说你有个class名字,包括包名,想知道哪个jar里有这个class名字?
    Fancye
        25
    Fancye  
       2015-02-05 10:20:03 +08:00
    @mikemikemike I done. If you need, put your email please.
    Fancye
        26
    Fancye  
       2015-02-05 15:05:37 +08:00
    xbaofeng
        27
    xbaofeng  
       2015-02-06 21:32:05 +08:00
    total commander 直接搜压缩文件
    Fancye
        28
    Fancye  
       2015-02-12 23:04:58 +08:00
    cmd: java -jar findJar.jar

    Jar from pan.baidu: http://pan.baidu.com/s/1kT9TSBd password: vlvp
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     868 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 21:43 PVG 05:43 LAX 14:43 JFK 17:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86