まず、このトピックに関する多くのSOの質問を読み、それらで提案されていることを試しました。
これが私の状況です。私はProcessingフレームワークを使用してJavaアプリを作成しており、アプリのパッケージ化について考える必要がある最終段階にあります。コマンドラインから実行可能なjarファイルは、Eclipseのエクスポート機能を使用してビルドしようとしているものです。
私のプロジェクトの構造は次のようになります。
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
jarファイルをエクスポートしてjarをuzipして内容を調べると、これらのdirの内容が.jarの最上位にダンプされていることがわかります。
これは次のようになります:
.jar
packages
jar files
fonts
json files
したがって、次のような構成ファイルをロードしようとすると、次のようになります。
BufferedReader reader = new BufferedReader( new FileReader( path ) );
Eclipseでアプリを実行すると、すべてがファイルだけで機能します。しかし、jarファイルは。をスローしFileNotFoundException
ます。
class.getClass().getResource()
これらのような問題に関してSOで見た質問の多くは、またはを使用することをお勧めしclass.getResourceAsStream()
ます。次のように、相対パスとファイル名だけを使用して、これらの両方を試しました。
class.getResource( 'config.json' );
class.getResources( 'cfg/config.json' );
class.getResourceAsStream( '../../config.json' );
以下を使用してEclipseまたはjarから実行すると、これらのメソッドはすべてnullを返します。
java -jar myjarfile.jar
Antファイルを使用することもできます。実際、私は現在、エクスポート機能によって生成されたAntファイルを使用してjarをビルドしています。それに追加できるものがあれば、ディレクトリをjarに追加することもできます。