Я унаследовал проект и наткнулся на этот фрагмент кода, который пытается загрузить ресурс в /src/main/resources
, используя URL-адрес, заданный getSystemResource
, и получает его поток:
try
{
is = new URL(this.getClass().getSystemResource("checker/config.default.xml").toString()).openStream();
FileUtils.copyInputStreamToFile(is, this.configFile);
}
catch (IOException e)
{
log.error("Could not load default config from API resources!", e);
}
finally
{
IOUtils.closeQuietly(is);
}
Но после того, как я внес некоторые изменения в файл конфигурации, фрагмент кода не сделал то, что должен был сделать, и все еще получил устаревшую версию конфигурации. Я тоже пробовал с getResource
:
ClassLoader classloader = getClass().getClassLoader();
is = new URL(classloader.getResource("checker/config.default.xml").toString()).openStream();
и, наконец, остановился на getResourceAsStream
ClassLoader classloader = this.getClass().getClassLoader();
is = classloader.getResourceAsStream("checker/config.default.xml");
Безрезультатно, хотя это работает, когда я тестирую код локально в Eclipse, и я не получаю null
, когда тесты используют инструмент в Jenkins, инструмент все еще использует устаревшую конфигурацию из нескольких выпусков назад.
Также я вполне уверен, что путь, который я использую в методе, правильный. Я пытался /src/main/resources/checker/config.default.xml
или /checker/config.default.xml
, но это дает мне NullPointerException
.
РЕДАКТИРОВАТЬ - дополнительная информация:
Я собираю локально с помощью Eclipse jar, как сделал бы Дженкинс, и проверил, что в него также включена правильная версия ресурса. Также тестовое рабочее пространство очищается после каждого запуска Jenkins.
Я в растерянности, как убедиться, что он всегда выбирает последнюю версию файла. Есть ли альтернативный метод, который я пропустил? Это какая-то странная проблема с кешем, о которой я не знаю?