我正在開發SonarQube的插件,它必須做的一部分是將文件從自身複製到SonarQube服務器的目錄。我正在使用Apache Commons IO,並發現FileUtils.copyDirectory
奇妙地工作(在用主要方法測試之後)。
麻煩來自嘗試從插件本身的jar中獲取我想要複製的文件的目錄。我曾經嘗試這樣做:
自定義插件無法從jar複製文件,因爲協議是「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
但是,當我安裝插件到SonarQube在聲納的「插件」罐子文件夾文件夾,此方法打印出null
。
我調查了一下,發現FileUtils.toFile(URL url)
將返回null,如果url參數具有「File」以外的協議。所以我在我的方法中添加了這一行:System.out.println(inputUrl.getProtocol());
果然,在我的IDE中協議是「文件」,但是當我的插件安裝時協議是「jar」!
我已經花了堆棧溢出的最後一天,谷歌試圖找到一種方法來處理這個,但無濟於事。
我願意嘗試/重構任何東西。
我想要做的就是讓我的插件從它的jar中將一個目錄複製到SonarQube的服務器上。
我該怎麼做?
如果它是相關的,這裏是我的項目中的目錄(我想要複製的「圖像」文件夾中的所有內容):
[Project Directory]
|
+--/src/main/resources
|
+--images
|
+--profiles
|
+--awards
| |
| +--Award1.png
| |
| +--Award2.png
|
+--projects
|
+--default.png
這裏是複製在SonarQube目錄服務器: [SONARQUBE_HOME]/war/sonar-server/images
類路徑的資源是不是每個定義的本地磁盤文件系統資源。總而言之,我相信你會完全錯誤的方向去解決你錯誤地認爲* this *是正確的解決方案的原始問題。可能相關:http://stackoverflow.com/questions/8885201/uploaded-image-only-available-after-refreshing-the-page/8889096#8889096 – BalusC