从多个 JAR 加载同名资源
具有相同路径和名称的资源可能存在于类路径上的多个 JAR 文件中。常见情况是遵循惯例的资源或者是包装规范的一部分。这些资源的例子是
- META-INF / MANIFEST.MF
- META-INF / beans.xml(CDI 规范)
- 包含实现提供程序的 ServiceLoader 属性
要访问不同 jar 中的所有这些资源,必须使用 ClassLoader,它有一个方法。使用 Collections 函数可以方便地将返回的 Enumeration
转换为 List
。
Enumeration<URL> resEnum = MyClass.class.getClassLoader().getResources("META-INF/MANIFEST.MF");
ArrayList<URL> resources = Collections.list(resEnum);