2017-04-04 18 views
2

org.sonarsource.sonarqube:sonar-plugin-api:6.3を使ってプラグインを開発しています。 resourceフォルダにあるファイルにアクセスしようとしています。読み取りは単体テストでうまくいきますが、sonarqubeにjarファイルとしてデプロイされたときにファイルを見つけることができませんでした。SonarQubeプラグインの中からリソースファイルを読み込み

たとえば、ファイルSomething.txtsrc/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.txtSomething.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); 

+0

ファイルが正しくパッケージされていることを確認してください(最後のJARを開き、ファイルがルートにあることを確認してください)。それで '/ Something.txt'が動作するはずです。 –

+0

@ JulienH.-SonarSourceTeamはい、チェックしました。ファイルはすでにJARに正しく含まれています。私はJARを開き、ファイルはルートフォルダにあります。 'Something.txt'または'/Something.txt'の両方を使うと、コードは常に 'inputStream'をnullにします。 '/'は、それがオペレーティングシステムに依存していますか? –

+0

'Thread.getCurrentThread()。getClassLoader()'を使用する場合と比較して、 'getClass()。getClassLoader()'を使用する場合と異なりますか? –

答えて

関連する問題