2017-05-09 8 views
1

eclipseとjarの両方で動作する方法でリソースを読み込む方法を理解できません。Java classLoaderとgetResourceAsStream

私のプロジェクトでは、1つのソースファイルsrcがあります。 その下で、リソース(イメージ、オーディオ..)をインポートする新しいパッケージを作成しました。 リソースはsrc/resourcessrc/com/Mainclass.javaです。

他の回答からわかるように、.class.getResource(); はクラスのディレクトリを探し始めます。 Eclipseからjarファイルを抽出すると、クラスのディレクトリが変更されます。つまり 、唯一のEclipseでを働く

MainClass.class.getResourceAsStream("/resources/img.png") 

リソースがメインクラスと同じパスにないため、なぜ動作するのかわかりません。代わりに、私たちがcomから行くので、私は../resources/img.pngがうまくいくと思っています。src/、リソースは次のとおりです。それでも

、私はその中に見つける瓶、分離として抽出した後:

<root of the jar>/com/mainclass.java 

<root of the jar>/src/resources 

そしてそれは動作しません。

簡単な解決策は次のとおりです。MainClass.class.getResourceAsStream( "/ resources/img.png")がロードされているディレクトリを見つけるにはどうすればよいですか? 私は/ resources /をすべての単一のサブフォルダに入れてみましたが、それでも動作しません。 IT WILLリソースフォルダがjarと同じフォルダにあり、jarファイル自体の内部にない場合は、eclipseの外で動作します。プロジェクトは、MavenのJavaプロジェクトで、私は外部LIBSを持っていない

enter image description here

は、ここに私のビルド・パスです。

+1

だから、あなたのコードは、実際のようになります。 Eclipseで使用されるソース/コンパイル済みのレイアウトは、Eclipseの方法(たくさんの)とMavenの方法(少し)を混在させます。 – davidxxx

+0

グローバルに理解するには、https://maven.apache.org/guides/getting-started/を読んでください。 リソース要件については、https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directoryを参照してください。htmlの – davidxxx

答えて

3

リソースがsrc/main/resources(アプリケーションの一部である場合)またはsrc/test/resources(それらがテスト用にのみ使用され、最終的な成果物の一部ではない場合)の下にある必要があります。

メイクはsrc/main/resourcesからtarget/classesに、src/test/resourcesからtarget/test-classesにリソースをコピーします。テストの間に、target/classesと `target/test-classes 'がクラスパスに追加されます。私はあなたがMavenのベースのドキュメントを読むべきだと思う

MainClass.class.getResourceAsStream("/img.png") 
+0

私は根本的に正しいupvoteしかし、私は彼のEclipseの設定とMavenの彼の知識を参照してくださいその問題を解決することはわかりません – davidxxx

+1

@ davidxxx、私はあなたが意味することを知っています。私は 'src/resources'ディレクトリの内容を単に' src/main/resources'の下に移動しなければならないと考えています。 – carlspring

+0

@carlspirng src/main/resourcesにsrc/resourcesを移動し、リソースへの呼び出しごとにMainClass.class.getResourceAsStream( "/ img.png")にコードを変更することをお勧めしますか?ちょうど私がこれを正しく得たかどうかを確かめるために –

関連する問題