私はmain()
メソッドでEclipseにMavenプロジェクトを持っています。プロジェクトには埋め込みリソースを使用する依存関係があります。つまり、ファイルには/src/main/resources
が含まれています。プロジェクトから実行可能なJARファイルを作成したいと思います。問題は、埋め込みリソースをどのようにロードするかによって異なります。java -jar my.jar
を使って実行可能なJARとしてプロジェクトを実行することもできますし、Eclipseから直接実行することもできますが、両方ともを実行することはできません2つのケースで明らかにリソースが異なります。/src/main/resourcesからリソースをロードするには、Eclipseと実行可能なJARの両方から直接動作する方法がありますか?
たとえば、次のように私は、リソースをロードすることができます
// Loads /src/main/resources/script.rb;
// Works when run directly from Eclipse; throws an exception when run as a runnable JAR
InputStream resource = this.getClass().getResourceAsStream("/script.rb");
この方法で、私は成功したのEclipseから直接プロジェクトを実行することができます。 EclipseのExport → Runnable JAR file
を使用して実行可能なJARを作成すると、として実行しようとすると上記のコードが失敗するように、script.rb
リソースがresources
フォルダ内にJARのルートに置かれます。
// Works when run as 'java -jar my.jar', fails when run from Eclipse.
InputStream resource = this.getClass().getResourceAsStream("/resources/script.rb");
は今、エクスポートされたJARファイルが正常に動作しますが、私はもはや成功したのEclipseから直接Javaアプリケーションとしての私のプロジェクトを実行することはできません:私は/resources
フォルダを指すようにコードを変更することでこの問題を解決することができます。
私はリソースの読み込みに関するいくつかの他の記事を読んでいますが、これまで何も助けてくれませんでした。
これを修正し、どちらの場合でも正しく動作する方法でリソースをロードする方法はありますか?おそらく動作するのは、resources
フォルダの代わりにJARのルートにリソースを入れるようにEclipseを説得することですが、これが可能かどうかはわかりません。
src/main/resourcesはMavenディレクトリ構造の一部ですが、Mavenを使用してjarを作成していないようです。 eclipse export jar関数を使用するはずですか? – Gimby
@Gimbyリモートシステム上のJARをテストするのに便利なので、エクスポート機能を使用しています。 – w128
"エクスポート→Runnable JARファイルは、script.rbリソースをJARのルートにあるresourcesフォルダ内に置きます。 'src/main/resources'の中の何かがjarファイルのルートになければなりません。あなたはmavenにjarを生成させるべきです –