我正在使用org.sonarsource.sonarqube:sonar-plugin-api:6.3
开发插件。我正在尝试访问resource
文件夹中的文件。读取在单元测试中工作正常,但当它作为jar部署到sonarqube时,它无法找到文件。
例如,我在Something.txt
中有src/main/resources
文件。然后,我有以下代码
private static final String FILENAME = "Something.txt";
String template = FileUtils.readFile(FILENAME);
其中FileUtils.readFile看起来像
public String readFile(String filePath) {
try {
return readAsStream(filePath);
} catch (IOException ioException) {
LOGGER.error("Error reading file {}, {}", filePath, ioException.getMessage());
return null;
}
}
private String readAsStream(String filePath) throws IOException {
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)) {
if (inputStream == null) {
throw new IOException(filePath + " is not found");
} else {
return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
}
}
此问题与reading a resource file from within a jar类似。我也试过/Something.txt
和Something.txt
,两者都不起作用。如果我将文件Something.txt
放在sonarqube安装文件夹的classes
文件夹中,代码就可以了。
答案 0 :(得分:1)
试试这个:
File file = new File(getClass().getResource("/Something.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));
String something = IOUtils.toString(reader);
您不应该使用getContextClassLoader()。见isNewRecord