从SonarQube插件中读取资源文件

时间:2017-04-04 04:06:57

标签: file-io sonarqube

我正在使用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.txtSomething.txt,两者都不起作用。如果我将文件Something.txt放在sonarqube安装文件夹的classes文件夹中,代码就可以了。

1 个答案:

答案 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