从多个 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);