目录
一、下载源码
地址: https://github.com/pentaho/pentaho-kettle
我下载的是8.2这个源码,如下图所示,下载下来后应该是个zip文件,解压成目录即可。
二、导入工程
这里我使用的是idea导入kettle源码,eclipse我试了下,也大同小异。
idea的话,选择到如下目录即可。
工程导入后就如下图这样
此时工程还无法运行,有几个重要的模块需要去修改。
分别是kettle-core,kettle-engine,kettle-dbdialog和kettle-ui-swt。
修改pom.xml
首先打开kettle-core模块的pom.xml文件,
修改版本号 将8.2.0.0-snapshot改为8.2.0.0-342,
为什么要修改为342呢?
原因是无论在kettle官网的仓库中,如下是kettle官网仓库
https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/org/pentaho/pentaho-ce-jar-parent-pom/
还是在公司仓库中,都没有找到8.2.0.0-snapshot这个parent的文件,只有8.2.0.0-342,如果不修改的话,那么就无法下载pom中的jar包。
下图是kettle官网仓库的,只有8.2.0.0-342
将core模块的pom.xml修改如下
小插曲:
其实之前也在core模块建立了一般libs目录,把需要的包放在里面,然后修改了pom.xml文件,改为本地引用,如下图所示。
本地引用需要增加systemPath节点,但是编译的时候说scope不能是系统的,估计还需要加上
<scope>system</scope> 这个节点吧。
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-script</artifactId>
<version>${batik.version}</version>
<systemPath>${project.basedir}/libs/batik-script-1.9.1.jar</systemPath>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
修改完core后,需要在如下图所示界面,compile和install一下,
compile主要是为了看代码有没有报错,install是因为engine中有引用core的jar包。
同理,将kettle-engine,kettle-dbdialog和kettle-ui-swt模块都按照上述修改pom.xml。
三、运行
在kettle-ui-swt模块中找到org.pentaho.di.ui.spoon.Spoon#main,运行main方法,
此时会报错,报错如下,
这是因为缺少swt.jar这个jar包。
这个jar包存在pce-di-8.2.0.0-342这个工具中,下载地址如下,
https://sourceforge.net/projects/pentaho/files/Data%20Integration/
在kettle-ui--swt中新建libs目录,然后将这个swt.jar拷贝到此目录下。
注意此处我是win64的系统,所以也选择win64的包,否则无法运行
此时项目中还没有引用这个swt.jar包,在如下界面选择kettle-ui-swt,然后点击右侧加号,引入这个包。
引入后,调整swt.jar的顺序,放在最前面,如下图所示,
继续点击main,再次运行报错如下,
缺少spoon.xul文件,全局搜索后发现在assembiles模块下,
将上面的xul全拷贝到ui工程下即可,
再来一次,还报错,
百度一下,解释如下,
搜索了下发现是core中的pom.xml中引用了dom4j的包,给他加上jaxen的jar包就行,
再次运行,出界面了,
四、界面交换
配置了个表输入到表输出的交换,交换报错,后台打印如下,
界面上弹框显示缺少Mysql连接的包,所以工程中需要导入mysql的连接包。
在kettle-ui-swt中加入,
和引入swt.jar包一样,在如下图点击project structure
将mysql包引入进来,无需调整顺序,如图这样放最后就行,
执行交换,成功,说明源码编译和运行完成。