我需要阅读 Manifest
文件,该文件传递了我的类(class),但是当我使用时:
getClass().getClassLoader().getResources(...)
我从加载到 Java 运行时的第一个 .jar
中获取 MANIFEST
。
我的应用将从小程序或 webstart 运行,
所以我想我将无法访问我自己的 .jar
文件。
我实际上想从开始的 .jar
中读取 Export-package
属性
Felix OSGi,所以我可以将这些包暴露给 Felix。有什么想法吗?
最佳答案
您可以做以下两件事之一:
调用
getResources()
并遍历返回的 URL 集合,将它们作为 list 读取,直到找到你的:Enumeration<URL> resources = getClass().getClassLoader() .getResources("META-INF/MANIFEST.MF"); while (resources.hasMoreElements()) { try { Manifest manifest = new Manifest(resources.nextElement().openStream()); // check that this is your manifest and do what you need or get the next one ... } catch (IOException E) { // handle } }
您可以尝试检查
getClass().getClassLoader()
是否是java.net.URLClassLoader
的实例。大多数 Sun 类加载器是,包括AppletClassLoader
。 然后,您可以转换它并调用已知的findResource()
- 至少对于小程序 - 直接返回所需的 list :URLClassLoader cl = (URLClassLoader) getClass().getClassLoader(); try { URL url = cl.findResource("META-INF/MANIFEST.MF"); Manifest manifest = new Manifest(url.openStream()); // do stuff with it ... } catch (IOException E) { // handle }
关于java - 阅读我自己的 jar list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1272648/