2

私は 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

4

1 に答える 1

1

クラスパスのリソース (この場合はイメージまたはディレクトリ) が jar から取得されると、それは物理ファイルではなくなります

Stream代わりにこれらのリソースを読み取るようにコードを変更する必要があります。File


見る

于 2013-07-29T16:08:26.597 に答える