在Hadoop雲端環境執行程式時, 主要是將程式先包裹為一個JAR檔後,由Master 將其做為Task送出到各個node進行處理, 然而當系統較為複雜時,程式內引用的處理程序往往更為繁雜, 以生物資訊的案例來說, 一個專案中可能會需要用到如:連結遠端特定服務的library ( Ex:BLAST) , XML 的Library (Ex: JDOM) , 網路連結套件 (Ex: httpclient), WSDL, SAAJ …. 等許許多多的外部函式庫。 這狀況若以Web Service 來說並不會造成問題, 因為Netbeans 會自動Deploy 成一個 war檔進行部署。 但在一般的專案中, Netbeans只會將專案本身包為 JAR檔,其餘外部的函式( 如引入在 /lib/下的外部jar檔) 在build後並不會包入JAR中,而僅是存放在dist/中的lib/目錄下。 這在平常或許沒什麼太大問題, 只要設定classpath或放到公用java classpath (ext/lib)中即可。 但在雲端環境中,由於JAR是做為Task傳送到不同的node server執行, 除非是每個node都預先存放好 library,否則在執行時便會因為僅將專案JAR檔送出, 造成 node server找不到外部library 而引發ClassNotFoundException導致task falue 。 解決上述問題的方式,有以下幾種方法: 將library放入各node Server的共用函式資料夾 將外部涵式解開JAR後,將package複製到自己的專案內,再令其重新build包裹在一起 直接將JAR檔包進JAR中 然而在雲端環境中,若要逐一對node server預先設定外部library, 不只耗時費工 (node server可能高達百臺),更有可能因為外部server而無法進行設定。 以上作法最便利的便是第三種方式:將外部的JAR包入專案的JAR中 此方法類似 Eclipse中的 “Fat Jar” plugin ,可以將外部的JAR直接包裝進JAR中, 而 Netbeans的作法則僅需修改ANT的build.xml便可達成。 唯編輯AN