`
legend9999
  • 浏览: 32103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用URLClassLoader调用外部jar,并执行指定类方法

阅读更多

/**
	 * 加载jar,并得到指定的类
	 * 
	 * @param jarFileName
	 * @param classFullName
	 * @return
	 * @throws MalformedURLException
	 */
	private Class loadClass(String jarFileName, String classFullName)
			throws MalformedURLException {
		//要使用URLClassLoader,因为不是同工程下,同工程下可使用ClassLoader
		URLClassLoader classLoader = new URLClassLoader(new URL[] { new URL(
				jarFileName) });
		JarFile jarFile = null;
		Class c = null;
		try {
			jarFile = new JarFile(jarFileName.substring(5));
		} catch (IOException e) {
			e.printStackTrace();
		}
		Enumeration<JarEntry> en = jarFile.entries();
		while (en.hasMoreElements()) {
			JarEntry je = en.nextElement();
			String name = je.getName();
			String s5 = name.replace('/', '.');
			if (s5.lastIndexOf(".class") > 0) {
				String className = je
						.getName()
						.substring(0, je.getName().length() - ".class".length())
						.replace('/', '.');
				if (classFullName.equals(className)) {
					try {
						c = classLoader.loadClass(className);
						System.out.println(className);
					} catch (ClassNotFoundException e) {
						System.out.println("NO CLASS: " + className);
					} catch (NoClassDefFoundError e) {
						System.out.println("NO CLASS: " + className);
					}
					break;
				}

			}
		}
		return c;
	}



protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Class clazz = this.loadClass("file:C:" + File.separator + "Main.jar",
				"com.test.Main");
		System.out.println("开始执行!");
		// com.test.Main类中的二个方法,为了测试返回值写死,可以得到类中的方法集合
		String[] me_name = new String[] { "main", "a" };
		for (int i = 0; i < me_name.length; i++) {
			try {
				Method me = clazz.getMethod(me_name[i],
						new Class[] { new String[] {}.getClass() });
				// 方法的返回值,可以给方法加参数
				Object object = me.invoke(clazz.newInstance(), new Object[] { new String[] { "111111111" } });
				System.out.println(object);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		System.out.println("开始js!");
	}

0
3
分享到:
评论

相关推荐

    使用URLClassLoader加载本地文件夹c盘下的test.jar文件

    总之,使用URLClassLoader加载本地JAR文件是一种灵活的类加载方式,它允许我们动态扩展应用程序的功能,加载自定义的类库。正确理解和运用这个机制,可以极大地提升Java应用程序的可扩展性和灵活性。

    URLClassLoader中指定目录和jar的问题

    - 当`loadClass`方法被调用时,`URLClassLoader`会遍历其URL列表,查找指定类的`.class`文件。 3. **指定目录加载**: - 目录URL(如`file:/path/to/directory/`)用于加载目录下的类文件。类加载器会递归遍历...

    定义ClassLoader调用外部jar包

    这篇博文"定义ClassLoader调用外部jar包"探讨了如何创建一个自定义的ClassLoader,以便能够灵活地加载不在应用主类路径(ClassPath)中的jar包中的类。 首先,我们需要理解ClassLoader的工作原理。默认情况下,Java...

    Java 自动加载JAR文件并运行其中的类方法

    在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...

    java 反射运行时加载外部jar到Tomcat StandardClassLoader1

    总的来说,这段代码展示了如何利用 Java 反射机制在 Tomcat 中动态加载外部 JAR 文件,并执行其中的类和方法。需要注意的是,这种做法通常只适用于开发或测试环境,不推荐在生产环境中频繁使用,因为它可能会影响...

    java动态添加外部jar包到classpath的实例详解

    在上面的代码中,我们首先创建了一个URLClassLoader对象,然后使用其loadClass方法来加载外部jar包中的类文件。最后,我们可以使用反射机制来调用加载的类文件中的方法。 使用Java动态添加外部jar包到classpath的...

    JAVA文件中调用已编译的.CLASS的类.doc

    - 使用`findClass()`方法加载指定的类,并通过`newInstance()`方法创建实例。 4. **动态加载和执行类**: - 在`MyClassLoader`中,`test()`方法演示了如何加载和执行外部类的方法。它接受类路径字符串和类名,...

    jar 包 内文件读取 文件内容

    你需要创建一个`JarFile`对象,指定JAR文件的路径,然后通过调用`getEntries()`方法获取所有条目,或者通过`getEntry(String name)`获取特定条目。 2. **读取JAR内的资源文件**: - `JarInputStream`:如果你知道...

    动态加载jar

    1. **创建ClassLoader**:首先,你需要创建一个新的ClassLoader,通常继承自URLClassLoader,重写findClass()方法,以便从外部JAR文件中加载类。 ```java public class DynamicClassLoader extends URLClassLoader ...

    java reflection demo

    Java反射是Java编程语言中的一个强大特性...在这个"java reflection demo"中,我们学习了如何动态加载外部JAR包,以及如何通过反射来调用类中的方法,这些都是Java开发中的重要技能,特别是在设计可扩展和动态系统时。

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    java 动态加载的实现代码

    Java动态加载技术是指在Java程序运行过程中,根据需要动态地加载相应的类,创建对象,并执行其方法的过程。这种技术能够让Java程序在运行时根据外部条件决定加载哪些类,从而实现更加灵活和可扩展的程序设计。这种...

    华为 java 安全 编码 规范 安全篇 2.0

    - **XML实体验证**:使用安全的解析器,并禁用外部实体引用。 - **数据清理**:对所有外部数据进行适当的清理。 - **最小化XML功能**:避免使用复杂的XML特性。 #### 规则1.4:禁止直接使用不可信数据来记录日志 **...

Global site tag (gtag.js) - Google Analytics