【发布时间】:2011-11-26 03:48:38
【问题描述】:
根据this question,可以从jar文件中加载一个类:
ClassLoader loader = URLClassLoader.newInstance(
new URL[] { jarFileURL },
getClass().getClassLoader()
);
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
如何加载 jar 文件中包含的所有类?
【问题讨论】:
-
你到底为什么要这样做?
-
过早优化?不能容忍代码关键部分的延迟?无论哪种方式,在这种情况下,最好只在关键部分之前为每个“关键”对象创建一个对象。
-
这是一个实际的用例:如果你写了一个像 getdown (code.google.com/p/getdown) 这样的更新工具并替换了你自己的 jar(忽略这可能有点脆弱),我们尝试的类加载器会失败加载一个新类(因为文件句柄可能无效)。如果我们在更新程序结束之前预加载所有需要的类,我们就可以了。
-
这是另一个实际用例:bugs.java.com/bugdatabase/view_bug.do?bug_id=8022063中记录的类加载器错误的解决方法
-
@mcfinnigan 如果您想验证您的类是否可以在构建时(而不是运行时)加载(=未损坏)。
标签: java jar runtime classloader urlclassloader