2013-05-12 43 views
1

我試圖將GATE應用程序作爲獨立的JAR文件分發。我在項目的類路徑中使用GATE插件作爲資源,但setGateHome()需要一個File對象,我無法從打包在JAR內的資源獲取該對象。將GATE嵌入到與JAR中的gateHome一起使用

我認爲Java IO將被充分抽象出API可以處理這種情況,但事實證明File對象只能引用磁盤上的物理文件。

有沒有其他方法可以用GATE API做到這一點?或者有些選項強制JAR在運行之前將自己解壓到臨時文件夾中?

example in the docs用於servlet,但在這種情況下,可以從servlet獲取文件對象(我認爲是因爲WAR文件由servlet容器解壓縮)。

回答

0

按照ashingel的建議,我決定在初始化時將門資源解壓到臨時文件夾,如果它是從JAR文件運行的。

對於如何解壓文件夾中看到我的答案在這裏的細節:https://stackoverflow.com/a/16659655/281469

這裏是什麼,我(注:Apache的百科全書IO依賴):在做初始化一個例子使用

//My GATE resources are in the "/gate" folder of the JAR 
URI url = getClass().getResource("/gate").toURI(); 

File gateHome; 
if (url.isOpaque()) { 
    logger.info("Unpacking GATE resources from JAR"); 
    String tempDirectoryPath = FileUtils.getTempDirectoryPath(); 
    String gateResource = "gate"; 
    //Delete any existing temporary directory 
    FileUtils.deleteDirectory(new File(FilenameUtils.concat(tempDirectoryPath, gateResource))); 
    String gateHomePath = extractDirectoryFromClasspathJAR(getClass(), gateResource, tempDirectoryPath); 
    gateHome = new File(gateHomePath); 

} else { 
    gateHome = new File(url); 
} 
Gate.setGateHome(gateHome);