2011-12-30 1 views
1

В проекте войны в Maven я использую plug-maven-plugin в качестве контейнера разработки.Разница между (guava) Resources.getResource ("bddconf.xml") и свойствами.getClass(). GetResourceAsStream ("bddconf.xml");

Я отфильтровал некоторые файлы ресурсов и, в частности, назову его «bddconf.xml».

Этот файл фильтруется maven и помещается в каталог target/classes.

старый самодельный поиск BDD FWK после этого файла с этим фрагментом:

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

Когда я запускаю этот фрагмент кода, в моем веб-приложение (в причалу), InputStream является недействительным.

В то время как этот фрагмент кода, в тот же метод:

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

Может быть класс свойств и класс ресурсов guava имеют разные ClassLoaders (с разными привилегиями), поскольку Class.getResource() и Resources.getResource() выполняют для вас ту же работу. Вы можете посмотреть на источники гуавы:

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);