我继承了一个项目,偶然发现了这段代码片段,该片段试图使用/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上本地测试代码时可以使用,并且在Jenkins中使用该工具进行测试时我没有得到null
,但该工具仍然使用一些版本中的过时配置以前。
我也很确定方法中使用的路径是正确的。我尝试过/src/main/resources/checker/config.default.xml
或/checker/config.default.xml
,但它给了我NullPointerException
。
编辑-其他信息: 我像Jenkins一样使用Eclipse在本地构建jar,并检查其中是否包装了正确版本的资源。此外,每次运行Jenkins后,都会清理测试工作区。
我对如何确保始终获取最新版本的文件一无所知。我错过了另一种方法吗?是我不知道的某种奇怪的缓存问题吗?
答案 0 :(得分:0)
checker
项目只是更大项目的依赖项之一。
我发现所需资源的旧版本来自另一个依赖项。