首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java动态加载jar

Java动态加载jar
EN

Stack Overflow用户
提问于 2014-07-24 23:58:39
回答 2查看 1.3K关注 0票数 0

我找到了很多关于这个论点的讨论,但没有一个解决方案对我有效。

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

如果我创建一个非常简单的main,如下所示:

代码语言:javascript
复制
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();
        }
    }

我总是有这样的例外:

代码语言:javascript
复制
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似乎无法找到与我的插件类相同的包中的jar。

我尝试了许多解决方案,但没有一个对我有效。可以加载jar而不直接引用它(它在主类的同一个包中)。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-07-25 00:11:08

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

检查文件是否真的如A4L所说的那样看到该文件。

打印生成的URL,它在浏览器中工作吗?

试一试

代码语言:javascript
复制
 f.toURI().toURL();
票数 0
EN

Stack Overflow用户

发布于 2014-07-25 00:17:31

我找到了解决方案,从您需要做的同一个包中加载一个jar文件:

代码语言:javascript
复制
URL url = YourClass.class.getResource("mysql-connector-java-5.1.22.jar");
URLClassLoader child = new URLClassLoader(new URL[] { url }, YourClass.class.getClassLoader());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24938628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档