URLClassLoader in java



我正在做一个需要在运行时加载类的项目,所以我做了一些研究,发现我需要使用自定义类加载器。我实现了我自己的自定义UrlClassloader,并向它提供了我的jar文件的url,它正常工作,类文件被加载。我已经阅读了URLClassLoader的java文档,他们已经清楚地提到,任何以"/"结尾的URL都被认为是指一个目录,所以这是否意味着,如果我在目录中有多个jar文件,我的classloader将加载所有这些文件,我尝试过,但它不起作用。这背后的逻辑是什么呢?请解释一下,我很困惑。如果我想在运行时从一个目录加载多个jar文件,该怎么办?

您必须遍历目录中的文件并逐个添加

List<URL> urls = new ArrayList<>();
try(DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get(BASE_DIRECTORY), "*.jar")) {
    for (Path path : directoryStream) {
        urls.add(path.toUri().toURL());
    }
}
URLClassLoader urlClassLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]));

以"/"结尾时,表示从该目录查找加载内容。假设在该文件夹中有一个解压缩包。如果你有一个类com.abc.Test,要从一个文件夹中加载它,你需要在你引用的文件夹中有文件com/abc/Test.class

最新更新