Manifest
クラスを配信したファイルを読み取る必要がありますが、次のように使用します。
getClass().getClassLoader().getResources(...)
MANIFEST
最初に.jar
Java ランタイムにロードされたものから取得します。
私のアプリはアプレットまたは Web スタートから実行される
ため、自分のファイルにはアクセスできないと.jar
思います。
実際に、 Felix OSGi を起動したExport-package
から属性を読み取り、それらのパッケージを Felix に公開したいと考えています。何かアイデアはありますか?.jar
ベストアンサー1
次の 2 つのいずれかを実行できます。
返された 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 } }
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 }