`
reverocean
  • 浏览: 195516 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Use URLClassLoader load jar files into classpath

    博客分类:
  • Java
阅读更多
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class LoadJarClassloader {
	private static final String PROTOCAL_PREFIX = "file:///";

	public static ClassLoader getProjectClassLoader(String[] classPaths) throws MalformedURLException {

		// compute the project classpaths
		// REVIEW: Are the classpaths returned by computeDefaultRuntimeClassPath
		// enough to load class?
		URL[] urls = new URL[classPaths.length];
		for (int i = 0; i < classPaths.length; i++) {
			urls[i] = new URL(PROTOCAL_PREFIX + computeForURLClassLoader(classPaths[i]));
		}
		return new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
	}

	/**
	 * load <code>Class</code> in java project
	 * 
	 * @param project
	 *            <code>IJavaProject</code>
	 * @param className
	 *            name of class to load
	 * @return <code>Class</code>
	 * @throws ClassNotFoundException
	 * @throws CoreException
	 * @throws MalformedURLException
	 */
	public static Class loadClass(String className) throws ClassNotFoundException, MalformedURLException {
		ClassLoader loader = getProjectClassLoader(new String[] { "E:\\Projects\\LoadJar\\lib\\commons-dbcp-1.2.1.jar",
				"E:\\Projects\\LoadJar\\lib\\02182701940.jar" });
		Class clazz = loader.loadClass(className);
		loader = null;
		return clazz;
	}
	public static ClassLoader getClassLoader() throws ClassNotFoundException, MalformedURLException {
		ClassLoader loader = getProjectClassLoader(new String[] { "E:\\Projects\\LoadJar\\lib\\commons-dbcp-1.2.1.jar",
				"E:\\Projects\\LoadJar\\lib\\mysql-connector-java-3.0.14-mikuni-bin.jar" });
//		Class clazz = loader.loadClass(className);
//		loader = null;
		return loader;
	}
	public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
		Class clazz = loadClass("com.mysql.jdbc.Driver");
		Driver driver = (Driver)clazz.newInstance();
		String url = "jdbc:mysql://localhost:3306/test";
		String username = "root";
		String password = "reversea1";
		// 加载驱动程序以连接数据库
//		Class.forName("com.mysql.jdbc.Driver",true,getClassLoader());
		Properties info = new Properties();
		info.setProperty("user", username);
		info.setProperty("password", password);
		Connection connection = driver.connect(url, info );
		
		System.out.println(connection.toString());
	}

	/**
	 * transform the <code>IType</code> to <code>Class</code>
	 * 
	 * @param type
	 *            <code>IType</code>
	 * @return <code>Class</code>
	 * @throws ClassNotFoundException
	 * @throws MalformedURLException
	 */
	// public static Class typeToClass(IType type)
	// ClassNotFoundException,MalformedURLException {
	// if (null != type && (type.isClass() || type.isInterface())) {
	// String className = type.getFullyQualifiedName('$');
	// return loadClass(type.getJavaProject(), className);
	// }
	//        
	// return null;
	// }
	/**
	 * because of URLClassLoader assumes any URL not ends with '/' to refer to a
	 * jar file. so we need to append '/' to classpath if it is a folder but not
	 * ends with '/'.
	 * 
	 * @param classpath
	 * @return
	 */
	private static String computeForURLClassLoader(String classpath) {
		if (!classpath.endsWith("/")) {
			File file = new File(classpath);
			if (file.exists() && file.isDirectory()) {
				classpath = classpath.concat("/");
			}
		}
		return classpath;
	}
}
分享到:
评论
1 楼 reverocean 2008-11-06  
<?xml version="1.0" encoding="UTF-8"?> <hcicomponent> <componentdefinition> <projectuuid>Project UUID</projectuuid> <manifesttype>initiator</manifesttype> <componentowner> <teamname>sssssssssssssd</teamname> <ownername>d</ownername> <owneremail>g</owneremail> </componentowner> <manifestversion>g</manifestversion> </componentdefinition> <artifacts> </artifacts> </hcicomponent> 

相关推荐

    Java URLClassLoader动态加载jar包1

    `URLClassLoader`会读取这个JAR文件,并将其包含的类加载到当前运行的Java虚拟机(JVM)中。 在代码中,首先创建了一个`URL`对象,表示JAR文件的路径。接着,通过`URLClassLoader`的构造函数,传入URL数组来实例化...

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

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

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

    本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类加载器是负责查找并加载类的机制。Java虚拟机(JVM)使用一系列的类加载器,包括Bootstrap ...

    URLClassLoader中指定目录和jar的问题

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

    加载jar包中的spring配置文件

    这意味着如果你有多个相同命名的配置文件分别存在于不同的jar包中,`classpath*:`会找到所有这些文件。 4. **Spring的资源配置**:Spring允许开发者通过XML、Java配置或注解方式定义配置。在jar包中加载配置文件,...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    Eclipse打包成JAR包读取外部JAR包和外部配置文件

    有两种选项:`Extract required libraries into generated JAR`和`Package required libraries into generated JAR`。前者会将所有依赖的JAR文件解压并合并到生成的JAR中,后者则将依赖的JAR文件打包进一个独立的...

    解决classloader的jar包

    包括commons-logging commons-beanutils commons-lang ezmorph json-lib-2.4-jdk15 commons-collections-3.2.1的jar包,可以解决 org/apache/commons/lang/exception/NestableRuntimeException的问题

    Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例

    在这个场景中,我们看到一个基于Springboot的应用程序结合了Hutool-db库,利用URLClassLoader来实现动态加载外部数据库驱动和数据池的jar包。这使得开发者可以在不重启应用的情况下更新或添加新的数据库连接和资源池...

    aop面向切面需要的jar包

    在使用spring的aop功能时,这两个jar是必须的,否则会报错,如下: Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net....

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

    使用`URLClassLoader`,我们可以动态地将JAR文件添加到当前的类路径中。示例代码如下: ```java File jarFile = new File("path_to_your_jar.jar"); URL url = jarFile.toURI().toURL(); URL[] urls = new URL...

    URLClassLoader初体验

    `URLClassLoader`还提供了`loadClass()`方法,这个方法是`ClassLoader`的抽象方法实现,用于根据类名加载指定的类。当你调用`loadClass()`时,它会遍历提供的URLs,查找对应的.class文件,并将其转换为Class对象。 ...

    springboot动态加载jar包到容器中,并映射为接口

    ApplicationContextUtil.getBean(DynamicLoadClassHandler.class).loadJar(); // 使用 jar 匼中的类 componentService = ApplicationContextUtil.getBean(JarComponentService.class); } catch (Exception e) { ...

    定义ClassLoader调用外部jar包

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

    反射获取jar文件中的类

    这个方法使用了 JarFile 和 JarEntry 来获取 jar 文件中的所有类,然后使用 URLClassLoader.loadClass 方法加载类,并使用 getMethods 方法获取类中的方法。 反射的应用 反射机制有很多应用,例如: * 动态代理:...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    Field jarFilesField = URLClassLoader.class.getDeclaredField("jarFiles"); jarFilesField.setAccessible(true); List&lt;JarFile&gt; jarFiles = (List&lt;JarFile&gt;) jarFilesField.get(classLoader); for (JarFile ...

    AXMLPrinter2、baksmali、smali、dex2jar

    1、用AXMLPrinter2.jar反编译xxx.xml文件 解压xxx.apk,选择main.xml(也可选择其它xml文件,不过xml文件都是乱码),复制到AXMLPrinter2.jar所在目录,通过cmd 进入到AXMLPrinter2.jar所在目录,使用如下命令,得到的...

    在linux和windows下动态设置classpath调用java类方法脚本代码

    在编程世界中,Java是一种广泛使用的跨平台语言,它的运行依赖于类路径(Classpath),这是一个指示Java虚拟机(JVM)查找.class文件的环境变量。本文将详细讲解如何在Linux和Windows操作系统下动态设置classpath以...

    java反序列化漏洞URLClassLoader利用1

    4. **加载远程类**:然后调用`loadClass`方法,传入远程服务器上的类名(如`"exploit.ErrorBaseExec"`),使得`URLClassLoader`从该URL加载这个类。 5. **获取方法**:接下来,通过`getMethod`找到自定义类中的特定...

    android反编译dex2jar

    今天用dex2jar.bat反编译apk的classes.dex文件的时候报了以下错误: ---------------------------------------------------------------------------- 描述错误: ECHO 处于关闭状态。 Exception in thread "main" ...

Global site tag (gtag.js) - Google Analytics