web-dev-qa-db-ja.com

Jarにリソースを適切にパッケージ化する方法

同じ問題を対象とした質問が他にもあることは知っていますが、解決策がうまくいかないということです。必要なファイルを読み取り、リソースとしてパッケージ化することになっている小さなツールがあり、単一のクラスではなくjarとして使用したい他のプロジェクト(Eclipse Heliosを使用しています)に依存しています。

Eclipse内のアプリケーションとして、次の方法でリソースにアクセスできます。

String path = MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").getPath();
System.out.println(path);
File file = new File(MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").toURI());
defaultSource = readSOURCEFile(file);

リソースフォルダーを出力パス(コンパイルされたソース)の下に配置した場合のみ、srcフォルダーに配置した場合ではありません。

プロジェクトをパッケージ化すると、ルートフォルダーまたはclassesフォルダー内のリソースがまったくパッケージ化されません。 srcフォルダーにリソースがある場合は、src/resourcesの下にパッケージ化されます。

Export-Runnable Jarを使用していますが、何が間違っていますか? Export-Jarを試してみると、ソースとリソースを適切にパッケージ化できますが、メインクラスの設定に問題があり、jarを実行できません。マニフェストは正しく、クラスはそこにあります:-(。

2番目の問題:パッケージ化されたjarでエラーが発生します:URIが階層的ではありません(jar内のリソースを手動で移動した後、jarを実行できました)

前もって感謝します!

ソースをワークスペースにリンクしましたが、それが問題ですか?

18
UMY

プロジェクトのルートフォルダーの下にあるresourceフォルダーをEclipseの「ソースフォルダー」としてマークします(フォルダーを右クリックして、[ビルドパス]> [ソースフォルダーとして使用]に移動します)。次に、次のようなリソースをお読みください。

InputStream is = MyClass.class.getClassLoader().getResourceAsStream(name + ".SOURCE");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
17
Abhinav Sarkar