自分のJarのマニフェストを読む 質問する

自分のJarのマニフェストを読む 質問する

Manifestクラスを配信したファイルを読み取る必要がありますが、次のように使用します。

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

MANIFEST最初に.jarJava ランタイムにロードされたものから取得します。
私のアプリはアプレットまたは Web スタートから実行される
ため、自分のファイルにはアクセスできないと.jar思います。

実際に、 Felix OSGi を起動したExport-packageから属性を読み取り、それらのパッケージを Felix に公開したいと考えています。何かアイデアはありますか?.jar

ベストアンサー1

次の 2 つのいずれかを実行できます。

  1. 返された URL のコレクションを呼び出しgetResources()て反復処理し、自分の URL が見つかるまでマニフェストとして読み取ります。

     Enumeration<URL> resources = getClass().getClassLoader()
       .getResources("META-INF/MANIFEST.MF");
     while (resources.hasMoreElements()) {
         try {
           Manifest manifest = new Manifest(resources.nextElement().openStream());
           // If the line above leads to <null> manifest Attributes try from JarInputStream:
           // Manifest manifest = resources.nextElement().openStream().getManifest();
    
           // 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()。これは、少なくともアプレットの場合は、必要なマニフェストを直接返すことが知られています。

     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
     }
    

おすすめ記事