File file = new File(jar文件全路径);
URL url = file.toURL();
URLClassLoader loader = new URLClassLoader(new URL[] { url });
Class tidyClazz = loader.loadClass(所需class的含包名的全名);
笔者案例:
示例代码:
log4j.properties文件代码如下:
log4j.rootLogger=debug,appender1 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
JarLoadUtil.java文件代码如下:
package com.shihuan.urlclassloader; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import org.apache.commons.lang.SystemUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JarLoadUtil { private static Logger logger = LoggerFactory.getLogger(JarLoadUtil.class); private static URLClassLoader loader = null; /* * 加载lib目录下所有jar文件,并返回相应的的URLClassLoader */ public static URLClassLoader getURLClassLoader() { if (loader == null) { String fileNames[] = listFileNames(); if (fileNames != null && fileNames.length > 0) { URL urls[] = new URL[fileNames.length]; for (int i = 0; i < fileNames.length; i++) { try { StringBuilder sb = new StringBuilder(); sb.append("file:").append(SystemUtils.FILE_SEPARATOR).append(System.getProperty("user.dir")).append(SystemUtils.FILE_SEPARATOR).append("lib"); urls[i] = new URL(sb.toString() + SystemUtils.FILE_SEPARATOR + fileNames[i]); } catch (MalformedURLException e) { logger.error("加载lib目录下jar文件出错!", e); throw new RuntimeException("加载lib目录下jar文件出错!", e); } } loader = new URLClassLoader(urls); } } return loader; } /* * 查询lib目录下的所有文件名称 */ private static String[] listFileNames() { File file_directory = new File("lib"); return file_directory.list(); } }
TestUrlClassLoader.java文件代码如下:
package com.shihuan.test; import java.net.URLClassLoader; import java.sql.Connection; import java.sql.Driver; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import org.logicalcobwebs.proxool.ProxoolDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.shihuan.urlclassloader.JarLoadUtil; public class TestUrlClassLoader { private static Logger logger = LoggerFactory.getLogger(TestUrlClassLoader.class); /** * @param args */ public static void main(String[] args) { URLClassLoader loader = JarLoadUtil.getURLClassLoader(); ProxoolDataSource ds = new ProxoolDataSource(); ds.setDriver("com.mysql.jdbc.Driver"); ds.setDriverUrl("jdbc:mysql://localhost:3306/myword"); ds.setUser("root"); ds.setPassword("12345678"); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Class> clazz = null; try { clazz = loader.loadClass(ds.getDriver()); Driver driver = (Driver)clazz.newInstance(); Properties p = new Properties(); p.put("user", ds.getUser()); p.put("password", ds.getPassword()); conn = driver.connect(ds.getDriverUrl(), p); logger.info(conn.toString()); String sql = "select id,name from mytaba"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id") + " -- " + rs.getString("name")); } rs.close(); pstmt.close(); conn.close(); } catch (ClassNotFoundException e) { logger.error(e.getMessage(), e); } catch (InstantiationException e) { logger.error(e.getMessage(), e); } catch (IllegalAccessException e) { logger.error(e.getMessage(), e); } catch (SQLException e) { logger.error(e.getMessage(), e); } finally { try { if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
运行TestUrlClassLoader.java文件中的main方法即可。
或者在dos窗口执行ant命令后进入%PROJECT_HOME%/dist/jar目录,执行java -jar myapp-${日期}.jar