且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在java 9下运行时将jar添加到类路径

更新时间: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).