linux下如何查找jar包内的class

时间:2022-02-08 12:24:16
linux下,已知一class的全限定名,如何查找它在哪个jar包里

4 个解决方案

#1


http://www.cjsdn.net/post/view?id=173170&sty=3&bid=7&tpg=1&age=0&ppg=1

Jar Class搜索器 V1.0,英文名: JarClassSearch v1.0
--------------------------------
功能说明:
从指定路径包含的一系列jar包里面,查找指定java Class被包含的具体位置。

#2


引用 1 楼 hairetz 的回复:
http://www.cjsdn.net/post/view?id=173170&sty=3&bid=7&tpg=1&age=0&ppg=1

Jar Class搜索器 V1.0,英文名: JarClassSearch v1.0
--------------------------------
功能说明:
从指定路径包含的一系列jar包里面,查找指定java Class被包含的具体位置。


你说的这个工具是在Windows下的吧,我这个是在linux下哦,而且我没有安装软件的权限,只有read的权限,没有任何write的权限。

#3


用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
                                                                                
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
           将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
       jar cvfm classes.jar mymanifest -C foo/ .

#4


引用 3 楼 sixufan 的回复:
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
-c  创建新的归档文件
-t  列出归档目录
-x  解压缩已归档的指定(或所有)文件
-u  更新现有的归档文件
-v  在标准输出中生成详细输出
-f  指定归档文件名
-m  包含指定清单文件中的清单信息
-e  为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0  仅存储;不使用任何 ZIP 压缩
-M  不创建条目的清…


谢谢,虽然没有给出具体方法,不过也给我了一点提示,那就是可以列出jar包中的class目录,下面我把我在工作闲暇之余研究出来的办法跟大家分享一下。

find . -name "*.jar" | xargs -I arg1 /usr/java14/bin/jar vtf arg1 | sed 's%META-INF/MANIFEST.MF%######%g' | sed -n -e '/######/p' -e '/你要查找的class的名字/p'

在要查找jar的目录下执行以上命令,原理是先把所有jar包中的class名称列出来然后放进管道,然后因为jar包中一般都会有META-INF/MANIFEST.MF这个文件,所以就把这个文件名给替换成不带/的字符,因为/没法当作字符在sed里查找,然后在替换后的管道里查找替换后的字符"######",和你要查找的class的名字,实际上是想通过列出"######"的个数来找jar包。办法是土了点,如果用脚本的话很轻松,不过挺适合没有权限写文件的朋友们,比如说我,不能创建文件,没有FTP,只有一个SSH远程连,呵呵。

#1


http://www.cjsdn.net/post/view?id=173170&sty=3&bid=7&tpg=1&age=0&ppg=1

Jar Class搜索器 V1.0,英文名: JarClassSearch v1.0
--------------------------------
功能说明:
从指定路径包含的一系列jar包里面,查找指定java Class被包含的具体位置。

#2


引用 1 楼 hairetz 的回复:
http://www.cjsdn.net/post/view?id=173170&sty=3&bid=7&tpg=1&age=0&ppg=1

Jar Class搜索器 V1.0,英文名: JarClassSearch v1.0
--------------------------------
功能说明:
从指定路径包含的一系列jar包里面,查找指定java Class被包含的具体位置。


你说的这个工具是在Windows下的吧,我这个是在linux下哦,而且我没有安装软件的权限,只有read的权限,没有任何write的权限。

#3


用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
                                                                                
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
           将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
       jar cvfm classes.jar mymanifest -C foo/ .

#4


引用 3 楼 sixufan 的回复:
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
-c  创建新的归档文件
-t  列出归档目录
-x  解压缩已归档的指定(或所有)文件
-u  更新现有的归档文件
-v  在标准输出中生成详细输出
-f  指定归档文件名
-m  包含指定清单文件中的清单信息
-e  为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0  仅存储;不使用任何 ZIP 压缩
-M  不创建条目的清…


谢谢,虽然没有给出具体方法,不过也给我了一点提示,那就是可以列出jar包中的class目录,下面我把我在工作闲暇之余研究出来的办法跟大家分享一下。

find . -name "*.jar" | xargs -I arg1 /usr/java14/bin/jar vtf arg1 | sed 's%META-INF/MANIFEST.MF%######%g' | sed -n -e '/######/p' -e '/你要查找的class的名字/p'

在要查找jar的目录下执行以上命令,原理是先把所有jar包中的class名称列出来然后放进管道,然后因为jar包中一般都会有META-INF/MANIFEST.MF这个文件,所以就把这个文件名给替换成不带/的字符,因为/没法当作字符在sed里查找,然后在替换后的管道里查找替换后的字符"######",和你要查找的class的名字,实际上是想通过列出"######"的个数来找jar包。办法是土了点,如果用脚本的话很轻松,不过挺适合没有权限写文件的朋友们,比如说我,不能创建文件,没有FTP,只有一个SSH远程连,呵呵。