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;
}
}
分享到:
相关推荐
`URLClassLoader`会读取这个JAR文件,并将其包含的类加载到当前运行的Java虚拟机(JVM)中。 在代码中,首先创建了一个`URL`对象,表示JAR文件的路径。接着,通过`URLClassLoader`的构造函数,传入URL数组来实例化...
在上面的代码中,我们首先创建了一个URLClassLoader对象,然后使用其loadClass方法来加载外部jar包中的类文件。最后,我们可以使用反射机制来调用加载的类文件中的方法。 使用Java动态添加外部jar包到classpath的...
本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类加载器是负责查找并加载类的机制。Java虚拟机(JVM)使用一系列的类加载器,包括Bootstrap ...
- 当`loadClass`方法被调用时,`URLClassLoader`会遍历其URL列表,查找指定类的`.class`文件。 3. **指定目录加载**: - 目录URL(如`file:/path/to/directory/`)用于加载目录下的类文件。类加载器会递归遍历...
这意味着如果你有多个相同命名的配置文件分别存在于不同的jar包中,`classpath*:`会找到所有这些文件。 4. **Spring的资源配置**:Spring允许开发者通过XML、Java配置或注解方式定义配置。在jar包中加载配置文件,...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
有两种选项:`Extract required libraries into generated JAR`和`Package required libraries into generated JAR`。前者会将所有依赖的JAR文件解压并合并到生成的JAR中,后者则将依赖的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包。这使得开发者可以在不重启应用的情况下更新或添加新的数据库连接和资源池...
在使用spring的aop功能时,这两个jar是必须的,否则会报错,如下: Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net....
使用`URLClassLoader`,我们可以动态地将JAR文件添加到当前的类路径中。示例代码如下: ```java File jarFile = new File("path_to_your_jar.jar"); URL url = jarFile.toURI().toURL(); URL[] urls = new URL...
`URLClassLoader`还提供了`loadClass()`方法,这个方法是`ClassLoader`的抽象方法实现,用于根据类名加载指定的类。当你调用`loadClass()`时,它会遍历提供的URLs,查找对应的.class文件,并将其转换为Class对象。 ...
ApplicationContextUtil.getBean(DynamicLoadClassHandler.class).loadJar(); // 使用 jar 匼中的类 componentService = ApplicationContextUtil.getBean(JarComponentService.class); } catch (Exception e) { ...
这篇博文"定义ClassLoader调用外部jar包"探讨了如何创建一个自定义的ClassLoader,以便能够灵活地加载不在应用主类路径(ClassPath)中的jar包中的类。 首先,我们需要理解ClassLoader的工作原理。默认情况下,Java...
这个方法使用了 JarFile 和 JarEntry 来获取 jar 文件中的所有类,然后使用 URLClassLoader.loadClass 方法加载类,并使用 getMethods 方法获取类中的方法。 反射的应用 反射机制有很多应用,例如: * 动态代理:...
Field jarFilesField = URLClassLoader.class.getDeclaredField("jarFiles"); jarFilesField.setAccessible(true); List<JarFile> jarFiles = (List<JarFile>) jarFilesField.get(classLoader); for (JarFile ...
1、用AXMLPrinter2.jar反编译xxx.xml文件 解压xxx.apk,选择main.xml(也可选择其它xml文件,不过xml文件都是乱码),复制到AXMLPrinter2.jar所在目录,通过cmd 进入到AXMLPrinter2.jar所在目录,使用如下命令,得到的...
在编程世界中,Java是一种广泛使用的跨平台语言,它的运行依赖于类路径(Classpath),这是一个指示Java虚拟机(JVM)查找.class文件的环境变量。本文将详细讲解如何在Linux和Windows操作系统下动态设置classpath以...
4. **加载远程类**:然后调用`loadClass`方法,传入远程服务器上的类名(如`"exploit.ErrorBaseExec"`),使得`URLClassLoader`从该URL加载这个类。 5. **获取方法**:接下来,通过`getMethod`找到自定义类中的特定...
今天用dex2jar.bat反编译apk的classes.dex文件的时候报了以下错误: ---------------------------------------------------------------------------- 描述错误: ECHO 处于关闭状态。 Exception in thread "main" ...