org.sonarsource.sonarqube:sonar-plugin-api:6.3
を使ってプラグインを開発しています。 resource
フォルダにあるファイルにアクセスしようとしています。読み取りは単体テストでうまくいきますが、sonarqubeにjarファイルとしてデプロイされたときにファイルを見つけることができませんでした。SonarQubeプラグインの中からリソースファイルを読み込み
たとえば、ファイルSomething.txt
はsrc/main/resources
にあります。その後、私はFileUtils.readFileは、この質問はreading a resource file from within a jarと似ている
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);
}
}
}
ようになり、次のコード
private static final String FILENAME = "Something.txt";
String template = FileUtils.readFile(FILENAME);
を持っています。私も/Something.txt
とSomething.txt
で試してみましたが、どちらも動作しません。Something.txt
をsonarqubeインストールフォルダのclasses
フォルダに置くと、コードが動作します。あなたはgetContextClassLoader()を使うべきではありません
File file = new File(getClass().getResource("/Something.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));
String something = IOUtils.toString(reader);
:
ファイルが正しくパッケージされていることを確認してください(最後のJARを開き、ファイルがルートにあることを確認してください)。それで '/ Something.txt'が動作するはずです。 –
@ JulienH.-SonarSourceTeamはい、チェックしました。ファイルはすでにJARに正しく含まれています。私はJARを開き、ファイルはルートフォルダにあります。 'Something.txt'または'/Something.txt'の両方を使うと、コードは常に 'inputStream'をnullにします。 '/'は、それがオペレーティングシステムに依存していますか? –
'Thread.getCurrentThread()。getClassLoader()'を使用する場合と比較して、 'getClass()。getClassLoader()'を使用する場合と異なりますか? –