私は SonarQube 用のプラグインを開発しています。それが行う必要があることの一部は、それ自体から SonarQube サーバーのディレクトリにファイルをコピーすることです。私は Apache Commons IO を使用していますが、それがFileUtils.copyDirectory
うまく機能することを発見しました (main メソッドでテストした後)。
問題は、プラグイン自体の jar からコピーしたいファイルのディレクトリを取得しようとすることにあります。私はこれを試しました:
public File getSrcDir() {
URL inputUrl = getClass().getResource("/images");
File srcDir = FileUtils.toFile(inputUrl);
System.out.println(srcDir);
return srcDir;
}
IDE (Eclipse) のメイン メソッドで実行すると出力されC:\...\[Project Directory]\target\classes\images
ますが、プラグインを Sonar の "plugins" フォルダー内の jar フォルダーとして SonarQube にインストールすると、このメソッドが出力されnull
ます。
調査したところFileUtils.toFile(URL url)
、url 引数に「ファイル」以外のプロトコルが含まれている場合、null が返されることがわかりました。そこで、この行をメソッドに追加しました。System.out.println(inputUrl.getProtocol());
案の定、私の IDE ではプロトコルは「ファイル」ですが、プラグインをインストールすると、プロトコルは「jar」になります!
私は最後の日、これに対処する方法を見つけようとして Stack Overflow と Google に注ぎ込みましたが、役に立ちませんでした。
私は何かを試したりリファクタリングしたりします。
私がやりたいことは、私のプラグインがディレクトリをそのjar内からSonarQubeのサーバーにコピーするようにすることだけです。
関連する場合、これが私のプロジェクト内のディレクトリです(「画像」フォルダーとその中のすべてをコピーしたい):
[Project Directory]
|
+--/src/main/resources
|
+--images
|
+--profiles
|
+--awards
| |
| +--Award1.png
| |
| +--Award2.png
|
+--projects
|
+--default.png
SonarQube サーバーでコピーするディレクトリは次のとおりです。
[SONARQUBE_HOME]/war/sonar-server/images