2013-07-29 78 views
2

我正在開發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

+0

類路徑的資源是不是每個定義的本地磁盤文件系統資源。總而言之,我相信你會完全錯誤的方向去解決你錯誤地認爲* this *是正確的解決方案的原始問題。可能相關:http://stackoverflow.com/questions/8885201/uploaded-image-only-available-after-refreshing-the-page/8889096#8889096 – BalusC

回答

1

當資源(在這種情況下,圖像或目錄)在類路徑從罐子來了,它不再是一個物理文件

你需要,使其從讀取這些資源修改代碼的代替File


+0

謝謝,這工作,雖然我不得不遵循您的鏈接的方式和試驗一堆。我結束了使用代碼從答案jabber給這個問題:http://stackoverflow.com/questions/1386809/copy-directory-from-a-jar-file –

+0

歡迎:) –