`
MouseLearnJava
  • 浏览: 466208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从jar包中搜寻拥有某个方法的所有class

阅读更多

看到一个问题,"一个jar包有很多的class,但是,唯一知道的只是一个方法名,怎么样知道哪一个或哪些class拥有这个方法呢?"

我想我们可以通过如下的步骤来实现:

1. 获取jar包中所有的JarEntry
2. 检查每一个JarEntry的name,如果name是以'.class'结尾,那么,获取class名字
3. 使用第2步中得到的class名字,通过反射获取Method数组。
4. 循环Method数组,如果发现方法名与已知的方法名一致,则在控制台输出该类的class name。

基于上述思想,我写了一个小程序,并去跑了一个实例--> 在jar包 'commons-lang-2.4.jar'中查找拥有方法名 'removeCauseMethodName' 的class。

控制台输出的结果如下:
Method [removeCauseMethodName] is included in Class [org.apache.commons.lang.exception.ExceptionUtils]

具体的代码如下:

注意: 运行如下程序之前请先把'commons-lang-2.4.jar' 添加到build path中,然后根据自己的workspace环境指定该jar包的具体路径。

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class SearchMetodInJarFile {

	private static final String CLASS_SUFFIX = ".class";

	public static void main(String[] args) throws IOException,
			SecurityException, ClassNotFoundException {

		/** target method name to be searched */
		String targetMethodClass = "removeCauseMethodName";

		/**
		 * Specify a target method name as 'removeCauseMethodName'. Find class
		 * name that includes the target method name in Jar File.
		 */
		new SearchMetodInJarFile().searchMethodName(new JarFile(
				"D:\\Develop\\workspace\\Test\\commons-lang-2.4.jar"),
				targetMethodClass);

	}

	/**
	 * Search target method name in multiple Jar files.
	 */
	public void searchMethodName(JarFile[] jarFiles, String targetMethodName)
			throws SecurityException, ClassNotFoundException {

		for (JarFile jarFile : jarFiles) {
			searchMethodName(jarFile, targetMethodName);
		}
	}

	/**
	 * Search target method name in one Jar file.
	 */
	public void searchMethodName(JarFile jarFile, String targetMethodName)
			throws SecurityException, ClassNotFoundException {
		Enumeration<JarEntry> entryEnum = jarFile.entries();
		while (entryEnum.hasMoreElements()) {
			doSearchMethodName(entryEnum.nextElement(), targetMethodName);
		}
	}

	/**
	 * Check the name of JarEntry, if its name ends with '.class'. Then do the
	 * following 3 steps: 1. Populate Class name. 2. Get the methods by
	 * reflection. 3. Compare the target method name with the names. If the
	 * methood name is equal to target method name. Then print the method name
	 * and class name in console.
	 */
	private void doSearchMethodName(JarEntry entry, String targetMethodName)
			throws SecurityException, ClassNotFoundException {
		String name = entry.getName();
		if (name.endsWith(CLASS_SUFFIX)) {
			/**
			 * Populate the class name
			 */
			name = name.replaceAll("/", ".")
					.substring(0, name.lastIndexOf("."));

			/**
			 * Retrieve the methods via reflection.
			 */
			Method[] methods = Class.forName(name).getDeclaredMethods();
			for (Method m : methods) {
				/**
				 * Print the message in console if the method name is expected.
				 */
				if (targetMethodName.equals(m.getName())) {
					System.out.println(String.format(
							"Method [%s] is included in Class [%s]",
							targetMethodName, name));
					break;
				}
			}

		}
	}
}
1
4
分享到:
评论

相关推荐

    JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了哪些jar包中

    JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了那些jar包中 对jar包上了数量的工程特别有用,而且是GUI界面的 真是人见人爱,见人爱人,javaer 的居家旅行必备

    在jar包中查找class等文件

    2.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询目个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 3.除了对Jar包进行搜索分析外,还可以对zip包进行分析 4...

    根据class类名在所有Jar包文件中查找class类路径以及jar名字

    1.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询某个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 2.列出指定路径下的所有Jar包文件 3.除了对Jar包进行...

    如何加载jar包中的spring配置文件

    在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...

    在jar包下找class文件

    `JarSearchFile`可能是一个命令行工具或者库,它的主要功能是在给定的文件夹结构中遍历所有的`jar`文件,并根据用户提供的类名或文件名搜索对应的`.class`文件。这个工具通常具备以下特性: 1. **递归搜索**:`...

    遇到jar包冲突时,需要找某个class文件在哪几个jar包中,可以用这个工具进行查找,很快速方便的

    遇到jar包冲突时,需要找某个class文件在哪几个jar包中,可以用这个工具进行查找,很快速方便的

    jclasslib修改jar包里面的class文件包含jar

    `jclasslib`是一款强大的反编译器和字节码查看器,它允许开发者查看并修改JAR文件中的`.class`文件。这篇文章将深入探讨如何使用`jclasslib`来操作包含其他JAR的复杂项目。 首先,了解`jclasslib`的基本功能。它...

    spring读取jar中的配置文件

    当我们的应用程序被打包成JAR文件后,有时我们需要从JAR内部读取配置文件,例如application.properties或application.yml。本文将深入探讨如何在Spring框架中实现这一功能。 首先,理解Spring的资源配置。Spring...

    jarsearch-eclipse查询jar中class插件

    总的来说,jarsearch-eclipse插件是Eclipse开发者必备的工具之一,尤其对于那些经常需要在大量jar和war包中查找特定class的开发者来说,它可以显著提升工作效率,简化工作流程。尽管"plugins"文件名没有提供具体信息...

    jar包、class文件读取工具

    此外,`URLClassLoader`可以加载jar包中的类,使得运行时能动态使用jar中的类。 3. 命令行工具:`jar`命令是Java SDK自带的工具,可用于创建、更新和提取jar文件。例如,`jar tf myjar.jar`可以列出jar包内的所有...

    jar包问题排查脚本.zip

    它通过遍历jar包中的所有class文件,检查它们的字节码来查找目标字段。这对于解决“类找不到”或者确认依赖是否正确引入的问题非常有帮助。 2. **grep-jar** `grep-jar`类似于Linux的`grep`命令,但它是专门用于在...

    最好的java反编译工具可以直接打开jar包

    2. **搜索功能**:内置搜索功能使得查找特定类或方法变得简单。 3. **代码高亮**:源代码显示带有语法高亮,便于阅读和理解。 4. **跨平台**:尽管示例中给出的是Windows版本,JD-GUI也有适用于Mac OS X和Linux的...

    CodeReviewTools:通过正则搜索、批量反编译特定Jar包中的class名称

    CodeReviewTools :party_popper: 介绍 ...通过正则直接反编译拥有特定groupId的jar包到某个目录 CodeReviewTools v1.0 by Ppsoft1991 usage: java -jar CodeReviewTools.jar -m -d,--dir &lt;arg&gt; ta

    eclips插件,用于查找某个class所在的jar包

    在Java开发过程中,经常需要定位一个特定的类(Class)存在于哪个JAR包中,特别是在大型项目或依赖众多的环境中。Eclipse作为一个流行的Java集成开发环境(IDE),提供了丰富的插件来增强其功能,其中"eclips插件,...

    JAR包查看器

    5. **提取文件**:用户可以直接从JAR包中提取所需的文件,以便在其他地方使用或进一步分析。 6. **编辑与创建**:虽然不是所有JAR查看器都支持,但一些高级工具也允许用户编辑现有JAR文件,甚至创建新的JAR包,这在...

    JVM加载class文件的原理机制

    JVM加载class文件的原理机制是Java中的核心机制之一,由于Java中的所有类必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器完成的。类装载器所做的工作实质是把类文件从硬盘读取到内存中。 类加载机制 ...

    jar包反编译软件(jad和JD-GUI)

    4. 在源代码查看区,你可以浏览和搜索jar包中的类文件源代码,无需手动保存,直接查看即可。 值得注意的是,反编译Java代码可能会涉及到版权问题,因此在未获得版权所有者许可的情况下,不应随意反编译和使用他人的...

    eclisp 查看jar源文件

    在Java开发过程中,有时我们需要查看或理解某个库函数的具体实现,这时就需要查看jar包中的源文件。Eclipse作为一款强大的Java集成开发环境(IDE),提供了查看jar源代码的功能。本教程将详细介绍如何在Eclipse中...

    Eclipse打jar包方法

    - **Included resources**: 你可以选择要包含在JAR包中的额外资源文件,比如配置文件、图片等。 - **Libraries**: 选择需要打包进JAR的所有依赖库。FatJar会自动处理这些依赖,将它们合并到一个单一的JAR文件中,...

    EveryClass

    快速搜索jar包中的类 在jar包中找到config.properties 其中 dirPath设置jar包所在的文件夹 indexDir设置索引所在的文件夹。 打开cmd ,输入java -jar 该jar包的路径 例如:java -jar D:\work\自己\everyclass\...

Global site tag (gtag.js) - Google Analytics