java - 阅读我自己的 jar list

标签 java osgi manifest.mf apache-felix

我需要阅读 Manifest 文件,该文件传递了我的类(class),但是当我使用时:

getClass().getClassLoader().getResources(...)

我从加载到 Java 运行时的第一个 .jar 中获取 MANIFEST
我的应用将从小程序或 webstart 运行,
所以我想我将无法访问我自己的 .jar 文件。

我实际上想从开始的 .jar 中读取 Export-package 属性 Felix OSGi,所以我可以将这些包暴露给 Felix。有什么想法吗?

最佳答案

您可以做以下两件事之一:

  1. 调用 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
        }
    }
    
  2. 您可以尝试检查 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/

相关文章:

java - iPhone 客户端与 Java 服务器对话

java - JAXB继承-非抽象基类

eclipse - Jetty 更新到 9.4.x 后 : Missing Constraint: Require-Capability: osgi. 扩展器;过滤器:="(osgi.extender=osgi.serviceloader.processor)"

java - 当方法有参数时,OSGi @Activate 会中断。错误: activate method not found; Component will fail

java - 如何使用类路径 : jar manifest header? 加载整个目录

java - 如何使 cucumber 的@Before仅限于一个功能文件?

java - 在 Java API/Jar 中隐藏公共(public)方法

java - OSGi 蓝图配置 : injecting a list of bean references

java - 在 Android 应用程序中使用 Jar 时读取我自己的 Jar 的 list

java - 构建 jar-with-dependencies 时的 ManifestEntries