![]() | 1 mikemikemike OP 这里能找到这样的合作朋友不? |
![]() | 2 exch4nge 2015-02-04 11:06:49 +08:00 可以不用java写。.jar文件可以当做zip压缩包,看看对应目录里有没有那个名字的xxx.class就好了。 (任何语言)用zip库遍历一下每个.jar文件的目录,查看是否存在对应路径上的.class文件即可。 哦,有可能遇到一个类在多个jar包的情况,这种情况我就不知道了…… |
![]() | 3 lxrabbit 2015-02-04 11:08:54 +08:00 jar -xvf xxx.jar 不是应该这样解包的么 |
![]() | 4 libo26 2015-02-04 11:34:43 +08:00 研究下jar命令吧 |
5 nesuk 2015-02-04 11:36:22 +08:00 好像有一个开源的组件(好像名字是WhichJar?),可以自动识别Class加载自哪个Jar。 |
6 nesuk 2015-02-04 11:36:41 +08:00 |
![]() | 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! |
![]() | 9 ledkk 2015-02-04 12:15:31 +08:00 java -verbose:class 这个会自己打印加载类所在的jar包路径的 |
![]() | 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的功能 |
![]() | 11 tension2012 2015-02-04 13:10:35 +08:00 grep javax/xml/soap/MessageFactory `find . -name *.jar` |
![]() | 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也可以做到。 |
![]() | 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! |
![]() | 15 Fancye 2015-02-04 13:54:15 +08:00 stdout: ``` file:/E:/Workspaces/MyEclipse%20Professional%202014/tcs/lib/redstone.jar ``` |
![]() | 16 Fancye 2015-02-04 13:55:05 +08:00 Sorry ,my class is XmlRpcClient! |
![]() | 17 mikemikemike OP |
![]() | 18 vjnjc 2015-02-04 16:18:25 +08:00 这种啊。。。貌似是用zip遍历。。。 同等高手 |
19 ericliuhe 2015-02-04 18:47:38 +08:00 via iPhone clazz.getResourceAsURL(clazz.getSimpleName() + ".class") 手机打字,方法名可能有点出入,自己纠正 把结果打印出来你就懂了 |
![]() | 20 yorkw 2015-02-04 18:58:26 +08:00 |
![]() | 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 |
![]() | 22 mikemikemike OP |
![]() | 23 fxbird 2015-02-04 22:31:00 +08:00 @mikemikemike how much?我写过 |
![]() | 24 KentY 2015-02-05 05:59:04 +08:00 你交代的不明白,你vm里load了一个class,你想知道这个class来自哪个jar? 还是说你有个class名字,包括包名,想知道哪个jar里有这个class名字? |
![]() | 25 Fancye 2015-02-05 10:20:03 +08:00 @mikemikemike I done. If you need, put your email please. |
![]() | 26 Fancye 2015-02-05 15:05:37 +08:00 @mikemikemike Source link:https://github.com/baininghan/findJar Jar from pan.baidu: http://pan.baidu.com/s/1c0CPIxU password:jntg |
27 xbaofeng 2015-02-06 21:32:05 +08:00 total commander 直接搜压缩文件 |
![]() | 28 Fancye 2015-02-12 23:04:58 +08:00 |