Разница между (guava) Resources.getResource ("bddconf.xml") и properties.getClass (). GetResourceAsStream ("bddconf.xml"); - PullRequest
1 голос
/ 30 декабря 2011

В военном проекте Maven я использую Jetty-Maven-плагин в качестве контейнера разработки.

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

Этот файл фильтруется maven и помещается в каталог target / 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 Ответ

1 голос
/ 30 декабря 2011

Может быть класс Properties и класс ресурсов 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...