如何获取 class 的加载路径

How to get a path a class is loaded from

我想在类路径上列出 一些 类,但我不想要所有的(此外,扫描整个类路径非常慢)。给定一个 ExampleClass,我想得到所有 类 驻留在同一个类路径条目(即目录或 JAR,其他情况可以忽略)。有一个 ClassLoader。

使用 ExampleClass.class.getResource("/") 不起作用,因为我总是获得第一个类路径条目,例如

/whatever/build/classes/main/

ExampleClass.class.getResource(".") returns 正确条目的子项,例如

/whatever/build/classes/test/somepackage/ExampleClass.class

这是我可以处理的事情

/whatever/build/classes/test/

但我想知道是否有比玩弄字符串更好的方法。

这是一个例子:

    package foo;
    public class Test
    {
        public static void main(String[] args)
        {
            ClassLoader loader = Test.class.getClassLoader();
            System.out.println(loader.getResource("foo/Test.class"));
        }
   }

输出为:

file:/C:/Users/Jon/Test/foo/Test.class
URL url = ExampleClass.getProtectionDomain().getCodeSource().getLocation();

但是检查是否为空。