2016-10-13 4 views
1

私は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を説得することですが、これが可能かどうかはわかりません。

+1

src/main/resourcesはMavenディレクトリ構造の一部ですが、Mavenを使用してjarを作成していないようです。 eclipse export jar関数を使用するはずですか? – Gimby

+0

@Gimbyリモートシステム上のJARをテストするのに便利なので、エクスポート機能を使用しています。 – w128

+0

"エクスポート→Runnable JARファイルは、script.rbリソースをJARのルートにあるresourcesフォルダ内に置きます。 'src/main/resources'の中の何かがjarファイルのルートになければなりません。あなたはmavenにjarを生成させるべきです –

答えて

1

Class.getResourceAsStream(...)を使用すると、パッケージに対して相対的な負荷がかかります。ルートからロードするには、Classloader.getResourceAsStream(...)を使用する必要があります。

例:

InputStream resource = this.getClass().getClassloader().getResourceAsStream("script.rb"); 

注意(src/main/resourcesがecliplseクラスパス上にあると仮定すると):/が削除されました!

+0

ありがとうございますが、残念ながらこの方法では、私はEclipseからプロジェクトを実行します。エクスポートされた実行可能なJARとして実行するときと同じように失敗します。 – w128

+0

@ w128 Mavenを使用している場合は、japanをEclipseで手動でエクスポートしないでください:Mavenを使用してjarファイルを生成してください。 –

関連する問題