当前位置: 首页 > 知识库问答 >
问题:

在Java9下运行时向类路径添加jar

田德运
2023-03-14

在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?

共有1个答案

卫增
2023-03-14

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