2011-12-30 3 views
1

Maven 전쟁 프로젝트에서 저는 개발 용 컨테이너로 jetty-maven-plugin을 사용합니다. (구아바) Resources.getResource ("bddconf.xml")와 properties.getClass().의 차이점 getResourceAsStream ("bddconf.xml");

나는 일부 리소스 파일을 필터링, 특히의는 "bddconf.xml을"이라는 이름을 할 수 있습니다.

이 파일은 받는다는에 의해 필터링 및 대상/classes 디렉토리에 배치됩니다.

이 조각이 파일 후 오래된 집에서 만든 BDD의 FWK 검색 : 나는이 코드를 실행하면

Properties properties = new Properties(); 
InputStream inputstream = properties.getClass().getResourceAsStream("/bddconf.xml"); 

, 내 웹 애플리케이션에 (부두)에서, inputStream을은 null입니다.

그것은 작동
import com.google.common.io.Resources; 
String file = Resources.getResource("bddconf.xml").getFile(); 
File file2 = new File(file); 
logger.info("Does bdd file exists : [" + file2.exists() + "] file : [" + file2.toString() + "]"); 
// Does bdd file exists : [true] file : [..path..\target\classes\bbdconf.xml] 

때문에,이 두 가지 방법의 차이점은 무엇입니까 : 같은 방법이 조각을 가진 반면

?

답변

1

Class.getResource() 및 Resources.getResource()가 동일한 작업을 수행하기 때문에 Properties 클래스와 guava Resources 클래스는 다른 권한을 가진 다른 ClassLoader를 가질 수 있습니다.

public static URL getResource(String resourceName) { 
    URL url = Resources.class.getClassLoader().getResource(resourceName); 
    checkArgument(url != null, "resource %s not found.", resourceName); 
    return url; 
    } 

Class.getResource :

name = resolveName(name); 
    ClassLoader cl = getClassLoader0(); 
    if (cl==null) { 
     // A system class. 
     return ClassLoader.getSystemResource(name); 
    } 
    return cl.getResource(name); 
당신은 구아바의 소스를 볼 수 있습니다