1. 前言
最近有些項目需要使用ETL工具,通過搜索引擎,找到了功能頗爲不錯的Kettle,而且是開源的,開發語言Java也屬於熟練的語言之一,所以決定選擇源碼剖析這條更爲專注的研究之路。
與大家思路不同的是,我希望用盡量少的知識和工具,來構建可理解的項目框架。也就是說使用原生態的開發工具,僅僅需要源碼和必要的配置文件,來搭建研究環境。本文使用的原材料只有3類:
- git客戶端
- Kettle安裝包
- Eclipse或者NetBeans等開發工具
源碼可以通過git客戶端下載,地址和主要源碼分支如下圖所示(我下載的版本是6.1.0.6):
下載後,可以看到很多文件夾與文件。其中,與環境搭建相關的主要文件夾解釋如下:
- core:核心源碼,包括異常、日誌、虛擬文件系統、國際化等。
- engine:引擎源碼,主要實現轉換與作業的執行邏輯,也包括Pan、Kitchen、Carte等命令行入口。
- dbdialog:數據庫連接的配置源碼。
- ui:圖形化界面源碼,Spoon相關菜單、工具欄、對話框、編輯器都在這裏實現。
2. 說明
具有Java開發經驗的朋友都知道,只有源碼是不足以正常通過編譯的,還需要一個非常重要的材料,那就是jar包。現在應該知道Kettle安裝包的作用了!如果Kettle的安裝包可以正常運行,那麼相關的jar包肯定是必備的,所以我們只需要將Kettle安裝包中的jar文件拷貝引用或者直接引用到項目中即可。
那麼現在只剩一個問題,我如果碰到編譯錯誤,也就能夠看到是哪個包缺少引用,但是我知道包的名稱,又如何確定是哪個jar提供的呢?
爲此,我專門寫了一個小的類,輸入包的名稱,我就會自動從指定文件夾下面的所有jar中查找,看看誰有這個包。如果你感興趣,可以發郵件到我的郵箱,本人樂意免費提供。
最終,我搭建的工程以及相互依賴關係如下圖(暫不考慮插件項目):
項目與源碼的文件夾的關係,看項目名稱即可猜出。
3. 實戰
下面以Eclipse爲例(版本:eclipse-java-neon-R-win32-x86_64),通過截圖說明各項目的文件結構。注意,部分文件(如xul、xml等)也需要從安裝包拷貝。
- kettle-core項目
代碼結構:
依賴的jar包:
- kettle-engine項目
代碼結構:
依賴的jar包:
- kettle-dbdialog項目
代碼結構:
依賴的jar包:
- kettle-ui項目
代碼結構:
依賴的jar包:
注意:其中對swt相關包的依賴,只有看你自己的機器環境選擇!