本文引用自bluedavid《java动态加载jar》
引用
bluedavid 的 java动态加载jar
/**
* project:codecreate
* package:com.bluedavid.util
* file:DriverUtil.java
* date:2009-12-15 下午12:35:59
*/
package com.bluedavid.util;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* description
*
* @author
*
*/
public class DriverUtil {
/**
* description:由一个jar文件中取出所有的驱动类
*
* @param file *.jar,绝对路径
* @return 返回所有驱动类
*/
public static Set<String> getDrivers(String file) {
JarFile jar = null;
Set<String> set = new HashSet<String>();
try {
jar = new JarFile(file);
} catch (IOException e) {
return null;
}
Enumeration<JarEntry> entries = jar.entries();
URLClassLoader loader = getLoad(file);
String name;
while(entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if(entry.getName().endsWith("Driver.class")) {
name = entry.getName();
name = name.substring(0, name.length() - 6);
name = name.replaceAll("/", ".");
Class<?> cc = null;
try {
cc = loader.loadClass(name);
} catch (ClassNotFoundException e) {
continue;
}
if(isDriver(cc))
set.add(name);
}
}
return set;
}
/**
* description:判断是否是数据驱动
*
* @param clazz
* @return
*/
public static boolean isDriver(Class<?> clazz) {
Class<?>[] ccc = clazz.getInterfaces();
boolean flag = false;
for(Class<?> aa : ccc) {
if(aa.getName().equals("java.sql.Driver")) {
flag = true;
}
}
if(!flag) {
for (; clazz != null; clazz = clazz.getSuperclass()) {
Class<?>[] interfaces = clazz.getInterfaces();
for(Class<?> aa : interfaces) {
if(aa.getName().equals("java.sql.Driver")) {
flag = true;
}
}
}
}
return flag;
}
/**
* description:根据一个文件(jar),返回一个ClassLoader
*
* @param file *.jar,绝对路径
* @return 返回一个ClassLoader
*/
public static URLClassLoader getLoad(String file) {
URL[] url = null;
try {
url = new URL[]{new URL("file:"+file)};
} catch (MalformedURLException e) {
return null;
}
URLClassLoader loader = new URLClassLoader(url);
return loader;
}
/**
* description:
*
* @param file 一个jar文件(绝对路径)
* @param clazz 需要加载的class路径com.mysql.jdbc.MysqlDriver
* @return
*/
public static Class<?> getDynamic(String file, String clazz) {
URLClassLoader loader = getLoad(file);
try {
return loader.loadClass(clazz);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
在Java编程语言中,动态加载jar文件是一种关键的特性,它允许程序在运行时加载新的类库或组件,而不是在编译时静态地链接。这种技术对于实现插件式开发或者模块化系统至关重要,因为它提供了灵活性和可扩展性。下面...
在Java编程语言中,动态加载jar包是一种常见的需求,它允许程序在运行时根据需要加载新的功能或更新现有的模块,增强了软件的灵活性和可扩展性。动态加载jar包技术主要涉及Java的反射机制、类加载器和插件系统。下面...
在Java编程中,动态加载JAR或ZIP包是一项重要的技术,它允许程序在运行时根据需求加载外部库,而不是在编译时静态地链接。这种技术对于实现插件化、模块化系统,或者处理频繁更新的组件非常有用。下面将详细讲解如何...
JAVA动态加载JAR文件以及反射调用其方法
在Java中,动态加载jar包的核心在于使用`java.lang.ClassLoader`类或其子类。ClassLoader是Java虚拟机(JVM)的一部分,负责将类的字节码加载到JVM中并转换为Class对象。默认情况下,JVM会使用系统类加载器来查找和...
Java 动态加载 jar 和 class 文件实例解析 Java 动态加载 jar 和 class 文件实例解析是 Java 语言中的一种重要机制,用于加载和实例化类文件。在 Java 中,类文件加载是动态的,也就是说只有当我们需要使用某个类时...
在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...
这个问题通常发生在使用`Class.forName()`或`ClassLoader.getSystemClassLoader().loadClass()`尝试动态加载第三方JAR中的类时。 Java虚拟机(JVM)的类加载机制是导致此问题的关键。自JDK 1.2以来,JVM采用委托...
Java URLClassLoader 是Java标准库中的一个类加载器,它允许我们动态地从指定的URL位置加载类和资源。这个功能在开发插件系统、热部署或者处理多种版本库的场景中非常有用。从JDK 1.2开始,`java.net.URLClassLoader...
在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...
综上所述,"springboot+java类热加载"是一个涉及SpringBoot框架、Java类加载机制、动态编译以及依赖管理的综合技术话题。通过理解这些概念和相关工具,开发者可以更高效地进行迭代开发,提高生产力。在实际应用中,...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
在Java编程中,有时我们需要在运行时加载和执行外部的jar文件,这通常是出于灵活性、模块化或插件架构的需求。这个过程涉及到类加载器(Class Loaders)的概念,它是Java虚拟机(JVM)的一个核心特性。下面将详细...
在Android开发中,动态加载JAR(Java Archive)文件是一种常见的技术,它允许应用程序在运行时加载和执行不在原始APK文件中的代码。这种技术有多种应用场景,例如更新功能、热修复、插件化框架等。下面将详细介绍...
在Java编程环境中,动态加载jar包是一项重要的技术,它允许我们无需重启服务器就能引入新的功能或更新已有的类。这在大型系统维护和迭代中尤为关键,因为它提高了系统的灵活性和可扩展性。以下是对"动态加载jar包的...
JavaBridge.jar, php-script.jar, php-servlet.jar, 和 script-api.jar 这四个文件是针对在Java环境中运行PHP应用程序的关键组件。这些JAR(Java Archive)文件主要用于在Apache Tomcat服务器上实现PHP与Java的集成...
Java 动态添加外部jar包到classpath是指在Java应用程序中动态地加载外部jar包到classpath中,以便在不重新启动服务器的情况下使用最新的代码。这项技术在项目开发过程中非常有用,因为它可以让开发者在不影响应用...
包括commons-logging commons-beanutils commons-lang ezmorph json-lib-2.4-jdk15 commons-collections-3.2.1的jar包,可以解决 org/apache/commons/lang/exception/NestableRuntimeException的问题
要在项目中使用这些组件,开发者需要将它们添加到Java应用服务器的类路径中,并且配置PHP环境来指向JavaBridge。通常,这涉及到修改php.ini文件,设置适当的Java桥接器路径,并可能需要配置web.xml文件以启用...