2016-07-21 10 views
0

Gradleプロジェクトのリソースフォルダからファイルをロードできない理由を知りたいと思いました。私のテスト/ javaディレクトリにgetResourcesAsStreamはjUnitからファイルをロードできません

/src 
    /main 
     /java 
      /datasets 
       /IrisDataReader.java 
     /resources 
      /datasets 
       /Iris.csv 
    /test 
     /java 
     /resources 
      /datasets 
       /Iris.csv 

が、私はプログラムにIris.csvを読むためにIrisDataReaderを使用するいくつかのテストを実行している:

私のプロジェクトには、次のフォルダ構造を有しています。

以下は、NULLポインタ例外を生成します。

InputStream inputStream = IrisDataReader.class.getResourceAsStream("/datasets/Iris.csv"); 

建てた場合、Gradleのは

次のファイル構造を作成し
/build 
    /classes 
     /main 
      /datasets 
       /IrisDataReader.class 
    /resources 
     /main 
      /datasets 
       /Iris.csv 

ここで奇妙な部分です:私は/ビルド/クラス/メインに構築/リソース/メイン/データセット/ Iris.csvをコピーする場合 /datasets /の場合、クラスローダーはファイルを正常にロードできます。何か案は?

私はgradleのデフォルト設定を変更したり、ビルドタスクを追加したりしていません。

+1

コードをどのように実行していますか?クラスパスとは何ですか? – Andreas

+0

私はIntelliJのguiでJUnitを実行しています。モジュールのクラスパスを使用するように設定されています(プロジェクトには複数のモジュールがあり、上記のソースツリーはモジュールの1つです) – brainmurphy1

答えて

0

IntelliJの.imlファイルの仕組みがわからないと、私は[module] .imlファイルにexternal.root.project.pathという別のモジュールが宣言されていることに気付きました。

私はそれを見つけたとき、それはのように見えた。だから私はこれにそれを変更...

external.root.project.path="$MODULE_DIR$/../anothermodule" 

external.root.project.path="$MODULE_DIR$" 

私はきれいにし、プロジェクトを再構築すると、IntelliJのは自動的ので、それを編集しました

external.root.project.path="$MODULE_DIR$/.." 

...それは仕事をしているようでした。私に尋ねないでください。

関連する問題