0

一般的な問題: JAR ファイル内のリソース ファイル (document.xml) を検索/検索する際に、特定の位置が固定されておらず、ファイルの名前も事前に不明です。

状況: 2 つの JavaSE プロジェクトで、両方とも独自の JAR ファイルを作成します。Jar-Ajar内のどこかにxmlドキュメントを保持します(場所は事前にわかりません)。特定の操作(設定情報など)のためにドキュメントの引き渡しJar-Bを依頼したい。JarA呼び出し元は Jar-B、リソース/ファイルがどのように呼び出され、その現在の場所がどこにあるかを知りませんJar-A

要件:内でリソースの名前を変更したり移動したりできるためJar-B、リソース/ファイルの固定された場所に依存する必要があり ます。探しているファイルの場所とファイルの名前を尋ねる必要があります。Jar-AJar-AJar-BJar-A

考えられる解決策の方向:META-INFディレクトリは常にMANIFETS.MFキーと値のペアを持つファイルを保持します。したがって、'ResourceLocator' というキーと 'org.my.package.ResourceLocator.class' のような値を保存すると、Jar-Bロードしてロケーター オブジェクトをインスタンス化できるクラスを見つけることができます。探しているファイルですよね?

resourcelocator を使用して、この方法でより多くの値を検索できます。

内に resourcelocator オブジェクトがあるJar-Aため、「もの」を参照するためのキーのみを文書化する必要がありますが、実際の実装は外部の世界から分離されています。

これがこの種のルックアップに対処するための良いアプローチであるかどうか疑問に思っていますか? についてはすでに知っていNetbeans Lookup APIますが、ルックアップにはクラス/インターフェース名が必要です。それは私が今探しているものではありません。

事前に知られていないリソースを検索するときに、 と を分離したままにする方法はJar-Aありますか?Jar-B

注: これはサービス ローダーやエクスターション メカニズムではありませJar-BJar-A。ここではそうではありません。Jar-Aの存在を知りませんJar-B

うまくいけば、誰かがすでにこの「問題」に遭遇しています。あなたのアイデアを共有してください.ありがとう!

JAR 仕様へのリンク:こちら

4

2 に答える 2

1

JAR は ZIP です。Java には適切なネイティブ サポートがあり、JAR-A を開き、内部のファイル (ZipFile.entries Enumeration) を表示するのに十分なようです。

これは、ファイルシステム上で JAR-A を見つけることができることを前提としています。あなたの説明の音から、JAB-B は JAR-A がどこにあるかを正確に知っていると思います。

于 2012-07-31T18:22:47.637 に答える
0

getClass().getResource()Jar-A は、またはgetClass().getResourceAsStream()のいずれか適切な方を使用して、リソース ファイルに内部的にアクセスします。

Jar-B は、Jar-A の公的に定義されたアクセス方法を使用してリソース ファイルにアクセスします。つまり、Jar-A が Jar-B のクラスパスに追加され、Jar-B のメソッドがpublic Resource getMethod();を使用してリソース ファイルにアクセスします。

于 2012-07-31T18:54:07.423 に答える