更新时间:2021-11-04 00:50:02
JavaSE9发行说明阅读相同内容:
应用程序类加载器不再是
的实例java.net.URLClassLoader
(一个在以前的版本中从未指定
的实现细节)。
The application class loader is no longer an instance of
java.net.URLClassLoader
(an implementation detail that was never specified in previous releases).
假设
的代码 ClassLoader :: getSytemClassLoader
返回 URLClassLoader
对象将需要更新
。
Code that assumes that
ClassLoader::getSytemClassLoader
returns a URLClassLoader
object will
need to be updated.
请注意, Java SE和JDK不为应用程序或库提供
API,以便在运行时动态扩充类
路径-time 。
此外,当需要扩展类路径时,可以使用
Additionally when an extended classpath is required, one can make use of
Class<?> clazz = Class.forName("nameofclass", true, new URLClassLoader(urlarrayofextrajarsordirs));
如来自Oracle的线程。这有警告:
java.util.ServiceLoader
使用线程的ClassLoader上下文Thread.currentThread()。setContextClassLoader(specialloader);
java.util.ServiceLoader
uses the thread's ClassLoader context Thread.currentThread().setContextClassLoader(specialloader);
java.sql.DriverManager
确实尊重调用类'ClassLoader,而不是Thread的ClassLoader。使用 Class.forName(drivername,true,new
URLClassLoader(urlarrayofextrajarsordirs).newInstance();
java.sql.DriverManager
does honors the calling class' ClassLoader, -not- the Thread's ClassLoader. Create Driver directly
using Class.forName("drivername", true, new
URLClassLoader(urlarrayofextrajarsordirs).newInstance();
javax.activation
使用线程的ClassLoader上下文(对javax.mail很重要)。
javax.activation
uses the thread's ClassLoader context (important for javax.mail).