如何使用java 9 app中的类加载器以编程方式将数据库jar文件加载到类路径中?

时间:2018-02-28 20:42:33

标签: java-9

我有java应用程序,使用以下代码将数据库驱动程序jar文件加载到类路径中

    for (int i = 0; i < fileNames.length; i++)
    {
         Method method = (URLClassLoader.class).getDeclaredMethod("addURL", new Class[] {URL.class});
         method.setAccessible(true);
         method.invoke((URLClassLoader)ClassLoader.getSystemClassLoader(), new Object[] { new File(fileNames[i]).toURI().toURL() });
    }

    Class.forName(driverClassName); 
    con = DriverManager.getConnection(_url, _uid, _pwd);

这不适用于Java 9,因为它在将系统类加载器强制转换为URLClassLoader时会出现强制转换异常。 你怎么能在java 9中做到这一点?

这是新代码

String[] fileNames = m_dbDriverFileName.split(";");

URL[] path = new URL[fileNames.length];

for (int i = 0; i < fileNames.length; i++)
{
     path[i] = new File(fileNames[i]).toURI().toURL();
}

URLClassLoader child = new URLClassLoader(path, this.getClass().getClassLoader());
Class.forName(m_dbDriverClass, true, child);

1 个答案:

答案 0 :(得分:4)

在Java 9上the system class loader is no longer a URLClassLoader(从未指定过 - 这是一个实现细节),并且无法在运行时将JAR附加到类路径。

您应该创建一个新的类加载器,例如a URLClassLoader,具有所需的路径,系统类加载器为父级。有关详细信息,您应该扩展您的问题以显示如何继续加载驱动程序。