当前位置: 首页 > 面试题库 >

是否可以在运行时将目录添加到类路径?

曹高阳
2023-03-14
问题内容

为了更好地理解Java中的工作原理,我想知道是否可以在运行时动态地向类路径添加目录。

例如,如果我使用 “ java -jar mycp.jar” 启动一个 .jar 并输出 java.class.path 属性,则可能会得到:

java.class.path: '.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java'

现在可以在运行时修改该类路径以添加另一个目录吗?(例如,在使用我要添加的目录中的 .jar 首次调用类之前)。


问题答案:

您可以使用以下方法:

URLClassLoader.addURL(URL url)

但是您需要使用反射来完成此操作,因为方法是protected

public static void addPath(String s) throws Exception {
    File f = new File(s);
    URL u = f.toURL();
    URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    Class urlClass = URLClassLoader.class;
    Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
    method.setAccessible(true);
    method.invoke(urlClassLoader, new Object[]{u});
}

参见Java 思考反射。特别是 反射的缺点



 类似资料:
  • 问题内容: 好的,我知道这个问题以前已经被问过很多次了,但是我已经搜索了一下,查看了示例,并查看了过去一个月中关于SO的问题,我真的无法解决这个问题。我认为问题是我希望能够从Eclipse和命令行运行该程序。我也在使用OSX,我认为我正在阅读的许多示例都是针对Windows / Linux的。 如果我有一个要在命令行中运行的,在Eclipse中编译的简单程序,请执行以下操作: 我有另一个程序在Ec

  • 我试图开发一个连接到Oracle数据库并执行函数的Java应用程序。如果我在Eclipse中运行应用程序,它可以工作,但是当我尝试在Windows命令提示符中运行. jar时,我会得到“遇到的错误:java.sql.SQLExc0019:找不到合适的驱动程序”。 我正在通过所有人的道路。在命令行中执行时,Eclipse中Maven依赖项中显示的jar文件。 步骤 > 从目标目录执行. jar,使用

  • 我有一个类MakeRedAspect在我的项目,使红色我的消息: 我也添加了在我的项目中使用aspectj所需的库,并且我也在META-INF/aop.xml类中添加了类的名称(我认为这两个足以使用方面类): 但它并没有使我的消息变红,而且看起来我的方面不起作用。我记得以前它工作得很好,我想我在java构建路径中添加了一些东西,在我的步骤中,还有什么方面没有发挥作用?

  • 本文向大家介绍是否可以将HTML5验证添加到Visual Studio?,包括了是否可以将HTML5验证添加到Visual Studio?的使用技巧和注意事项,需要的朋友参考一下 对于HTML5验证,您需要在Visual Studio中安装IntelliSense和验证支持。Visual Studio 2012支持HTML5。 VS 2010具有IntelliSense支持,但是VS 2012添加

  • 在java9之前,在运行时通过编程方式将外部jar添加到类路径中,每个人都使用: 现在使用java9我们遇到了问题: 在Java9中不再工作。在jdk9下,如何在运行时以编程方式向类路径添加外部jar?

  • 问题内容: 我正在为两个不同的表创建相同的实体。为了使两个实体的表映射等有所不同,但仅将其余代码放在一个地方- 抽象超类。最好的办法是能够在父类中注释诸如列名之类的通用内容(因为它们将是相同的),但这是行不通的,因为JPA注释不会被子类继承。这是一个例子: 我想继承并仅指定特定于孩子的内容,例如注释: 有什么想法或者我必须在子类中创建字段,获取器和设置器? 谢谢,克里斯 问题答案: 您可能想用类注