Kettle — 源码启动和代码结构分析

众所周知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:集成测试模块。