在java9之前,在运行时通过编程方式将外部jar添加到类路径中,每个人都使用:
URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.invoke(sysloader, new Object[]{file.toURI().toURL()});
现在使用java9我们遇到了问题:
URLClassLoader
在Java9中不再工作。在jdk9下,如何在运行时以编程方式向类路径添加外部jar?
JavaE9发行说明中也有同样的内容:
应用程序类加载器不再是java.net.URLClassLoader
的实例(在以前的版本中从未指定过实现细节)。
假定ClassLoader::GetSytemClassLoader
返回URLClassLoader
对象的代码需要更新。
Class<?> clazz = Class.forName("nameofclass", true, new URLClassLoader(urlarrayofextrajarsordirs));
>
java.util.ServiceLoader
使用线程的ClassLoader上下文Thread.CurrentThread().SetContextClassLoader(specialloader);
java.sql.DriverManager
确实支持调用类的类加载器,而不是线程的类加载器。直接使用class.forname(“drivername”,true,new URLClassLoader(urlarrayofextrajarsordirs).newInstance();
创建驱动程序
javax.activation
使用线程的ClassLoader上下文(对于javax.mail很重要)。
问题内容: 好的,我知道这个问题以前已经被问过很多次了,但是我已经搜索了一下,查看了示例,并查看了过去一个月中关于SO的问题,我真的无法解决这个问题。我认为问题是我希望能够从Eclipse和命令行运行该程序。我也在使用OSX,我认为我正在阅读的许多示例都是针对Windows / Linux的。 如果我有一个要在命令行中运行的,在Eclipse中编译的简单程序,请执行以下操作: 我有另一个程序在Ec
我试图开发一个连接到Oracle数据库并执行函数的Java应用程序。如果我在Eclipse中运行应用程序,它可以工作,但是当我尝试在Windows命令提示符中运行. jar时,我会得到“遇到的错误:java.sql.SQLExc0019:找不到合适的驱动程序”。 我正在通过所有人的道路。在命令行中执行时,Eclipse中Maven依赖项中显示的jar文件。 步骤 > 从目标目录执行. jar,使用
我正在使用Java代理和Javassist向一些JDK类添加一些日志记录。实际上,当系统加载一些TLS类时,Javassist会向它们添加一些额外的字节码,以帮助我调试一些连接问题。 问题是,考虑到这个类包含在代理jar中: 在我的代理的转换方法中,假设我试图使用javassist调用该类: 你认为这行得通,但我得到了这个: 有没有办法将该类[]添加到应用程序的类路径中?
我希望title本身是描述性的,但要明确的是,我试图在greeting-service.jar中包含(即,error-handling-service.jar)。在构建之后,我在新项目(即TestApplication)中包含了greeting-service.jar,但在执行我得到的TestApplication时(顺便说一句,TestApplication不是一个gradle项目) BaseE
问题内容: 为了更好地理解Java中的工作原理,我想知道是否可以在运行时动态地向类路径添加目录。 例如,如果我使用 “ java -jar mycp.jar” 启动一个 .jar 并输出 java.class.path 属性,则可能会得到: 现在可以在运行时修改该类路径以添加另一个目录吗?(例如,在使用我要添加的目录中的 .jar 首次调用类之前)。 问题答案: 您可以使用以下方法: 但是您需要使
我正在尝试使用第三方应用程序来测试Liberty Server18.0,并尝试在Linux上向Liberty Server类路径添加一个库。这个库名为:“com.ibm.websphere.javaee.security.1.0_1.0.21.jar”,它位于Liberty服务器的“/wlp/dev/api/sec”下。 我看得出来,它从来没上过子弹。我如何将这个jar添加到我的defaultSe