내 프로젝트 중 하나에서 리소스는 /src/test/resources
(일반적인 maven 디렉터리 구조)에 저장되어 있습니다. 이러한 리소스는 프로젝트에 저장된 유틸리티 클래스에 의해 사용됩니다.여러 프로젝트에서 공통 리소스 파일에 액세스하는 방법
유틸리티 클래스 자체가 다른 프로젝트에서 사용되고 있습니다 (다른 프로젝트는이 프로젝트에 의존합니다). 나는 그 같은 리소스에 액세스 할 :
final InputStream inputStreamDobs =
ClassLoader.class.getResourceAsStream("/dbunit/clear_db.xml");
을하지만 난 다른 프로젝트에서 그것을 사용하기 때문에 경로가 올바르지 않습니다 - 그것은 current project that is being built/tested
을 기준으로, 유틸리티 클래스와 자원은 하나없는 곳.
어떻게 접근하나요?
절대 경로가 필요하지 않습니다. 유틸리티 클래스의 상대 경로를 정의하는 방법이 필요합니다.
또한 여러 프로젝트에 걸쳐 리소스를 복제하고 싶지 않습니다. 건배.
편집 : 내가 통합 테스트 (일반 전체 DB 스키마) 후 지워야하는 XML 파일에있는 테이블의 정의가 컨텍스트를 제공합니다. 통합 테스트는 여러 프로젝트에 있지만 명확한 스크립트와 리소스 파일은 모두 동일하며 공통적 인 상위 프로젝트에 있습니다.
EDIT2 :
보너스 질문 : 공통 DTD 파일에 액세스하려는 여러 다른 프로젝트에서 XML 파일에서 액세스해야하는 (의는 tables.dtd
를 부르 자). (그것은 공통의 부모 프로젝트에있을 것이다).
<!DOCTYPE dataset SYSTEM "src/test/resources/dbunit/dobs.dtd">
방법이 다른 프로젝트에있는 파일을 가리 키도록을?
어째서? 상대 경로를 사용합니다. 프로젝트 루트와 관련이 있습니다. (?) – FazoM
getResourceAsStream은 classpath에서 Resource를로드하려고 시도합니다. 각 클래스 경로 항목의 루트에서 검색하기 때문에 절대적입니다. 상대 경로는 슬래시로 시작하지 않으며 현재 패키지에 상대적으로 검색됩니다. 그래서 여러분의 경로는 절대적으로 파일 시스템에 관한 것이 아니라 자바의 관점에서 절대적입니다. – Drunix
확인. 충분히 공정한 – FazoM