繁体   English   中英

Java动态加载jar

[英]Java load dynamically jar

我找到了很多关于该论点的讨论,但没有解决方案对我有用。

我想创建一个也包含jdbc驱动程序的简单插件(jar),以便工作。 然后,此插件将在更大的应用程序中使用。

如果我这样创建一个非常简单的主体:

public static void main(String[] args) {
        URL url;
        try {
            File f = new File("mysql-connector-java-5.1.22.jar");
            URLClassLoader child = new URLClassLoader(new URL[] { f.toURL() }, Plugin.class.getClassLoader());
            Class classToLoad = Class.forName("com.mysql.jdbc.Driver", true, child);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我总是有这样的例外:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)

似乎Class.forName无法找到与我的Plugin类相同的程序包中的jar。

我尝试了许多解决方案,但没有人为我工作。 可以在不直接引用jar的情况下加载jar(在主类的同一包中)。

谢谢

我认为jar文件的位置不应该与您的Package有关,更不可能在您启动该应用程序的当前工作目录中。

检查文件是否实际上将文件视为A4L,

打印生成的URL,在浏览器中是否可以使用?

尝试

 f.toURI().toURL();

我找到了解决方案,可以从您需要执行的相同包中加载jar文件:

URL url = YourClass.class.getResource("mysql-connector-java-5.1.22.jar");
URLClassLoader child = new URLClassLoader(new URL[] { url }, YourClass.class.getClassLoader());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM