2016-07-21 2 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를 사용하는 몇 가지 테스트를 실행 해요 :

내 프로젝트는 다음과 같은 폴더 구조를 가지고있다.

다음은 널 포인터 예외를 생성합니다.

내장
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을 실행하고 있습니다. 모듈의 클래스 패스를 사용하도록 설정되어 있습니다 (프로젝트에 여러 개의 모듈이 있으며 위의 소스 트리는 모듈 중 하나입니다) – brainmurphy1

답변

0

IntelliJ의 .iml 파일의 작동 방식을 정확히 알지 못해서 내 [모듈] .iml 파일에 external.root.project.path로 선언 된 다른 모듈이 있다는 것을 알게되었습니다. 내가 청소하고 프로젝트를 재건 할 때

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

, 인 IntelliJ는 자동적으로 그렇게 편집 : 그래서이 그것을 변경 ...

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

: 나는 그것을 발견했을 때

, 그것은처럼 보였다 그것은 다음과 같이 보입니다 :

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

... 그리고 그 일을하는 것처럼 보였습니다. 나 한테 묻지마.

관련 문제