衆所周知Kettle是一個開源的項目,所有我們有必要把Kettle的源碼pull下來進行簡單的分析,搞清楚Kettle的執行原理和實現過程。
首先我們需要從Github中將源代碼Pull下來。從Github上的分支可以看到,最新的版本應該是8.1.0.3的版本,而master分支最新的應該是9.0的RC版
Kettle源碼地址:https://github.com/pentaho/pentaho-kettle
下載的過程還是比較愉快的,不過打包和源碼運行就比較痛苦了(大多數應該是由於開發環境不同造成的)。這裏我們選擇8.1.0.3版本的,因爲Kettle7之前使用ant進行項目管理,現在脫離maven的項目肯定不適用我們現在開發了。
編譯打包
首先如果我們直接進入項目目錄用maven進行打包,有可能會出現部分Jar下載失敗,下載到一半卡住等等各種情況,看看自己的maven配置有沒有問題,如果沒有問題,重新下載就ok了,這個中間有幾個Zip的包非常的大,有幾百兆。如果一起順利下載完所有的包大概需要一兩個小時。
然後,使用的maven進行打包會出現下面的異常。
網上的方法無非兩種,這裏列一下,但是沒有起到效果。
1)在打包時加上,Dmvn.test.skip=true
2)在pom.xml文件中加入以下代碼
最後我把test相關的類都刪除了,這樣就能成功打包了。
源碼運行
這裏說明一下Idea運行不起了,報錯:NoClassDefFoundException,搞了半天也沒有解決問題。後來換STS啓動這個問題就沒有了,很奇怪。當然下面會遇到另外一個問題,如果我們是windows下跑的源碼,會出現下面這個問題。
這個問題是使用的jar包不對,因爲開發者默認使用linux下的jar包,而我的環境是windows。進行如下修改,將jar更換爲win的就行了。
接下來運行會報spoon.xul找不到的錯誤。
打包完是能運行的,說明代碼是沒問題的,看源代碼知道是通過classloader加載的,類加載器路徑是XXX/XXX/pentaho-kettle/ui/target/classes/,加上文件的相對路徑ROOT_PATH("/") + XUL_FILE_MAIN("ui/xxx.xul")。這個問題暫時想不到好的處理方式,就直接將對應的文件拷貝到對應的目錄了。
接下來在重新運行應該就能將項目跑起來了。
代碼結構分析
如下圖所示,kettle項目下面有八個模塊。
它們代表的意思分別是:
kettle-core:kettle的核心模塊,包括一些數據處理等。
kettle-dbdialog:kettle數據庫連接界面邏輯。
kettle-engine:kettle的引擎,負責執行kettle的具體作業和轉換的邏輯,並會調用core模塊。
kettle-ui-swt:用戶界面模塊,包括用戶界面顯示的xul文件,通過後端代碼編寫的Dialog以及國際化等。
pdi-assemblies:該模塊用於項目的生成,裏面主要包括各個工具啓動的腳本、靜態資源、幫助文檔、組件簡單的事例(ktr/kjb)、第三方包引用等。
pdi-engine-ext:kettle引擎擴展模塊。
pdi-plugins:kettle的核心插件模塊,如果我們要自定義組件,可以參考該模塊的組件。
integrantion:集成測試模塊。