実行時にロードする必要があるバンドルされたリソース (言語モデルのバイナリ ファイル) を含む jar ファイルがあります。jar 内のディレクトリ構造は次のとおりです。
tagger/app.class tagger
/models/stop/SentDetect.bin.gz
ここで、SentDetect.bin.gz は、パスが文字列パラメーターとしてサードパーティ クラス (SentDetector) に読み込まれるバイナリです。つまり、
URL url = this.getClass().getResource("models/stop/SentDetect.bin.gz");
SentenceDetector sdetector = new SentenceDetector(url.getPath());
Netbeans では問題なく動作しますが、コマンド ラインから jar として実行しようとすると、コンストラクターで FileNotFound Exception が発生します。コンパイル済みの Jar ファイルにバイナリが含まれていることを再確認しました。
解決策は通常、getResourceAsStream() を使用して入力ストリームとしてデータをロードすることだと思いますが、これはここではオプションではありません。URL が文字列パラメーターとしてサードパーティのコンストラクターに渡されているためです。問題は、URL が文字列に解析される方法にありますか?
私が試してみました:
url.getPath();
url.getFile();
url.toURI().getPath();
url.toString();
すべてがファイルに異なるパスを与えています。