本手册描述了开源 ETL
工具 Kettle 8.3
源码编译打包及 Debug
调试运行的详细步骤。
本手册编写的目的主要为了应对以下场景:在使用开源的 Kettle 过程中如有个性化需求需要自定义部分功能模块,或者发现系统 Bug 且官方未及时提供修复时,我们需要修改源码并且重新编译打包运行。更多的时候我们需要通过 Debug 调试运行的方式来排查问题。
版权声明:本文为「微酷网」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://weiku.co/article/431/
CSDN:https://blog.csdn.net/ifu25/article/details/103239489
[scode type=“green”]本手册基于 Win10 64
位操作系统编写,未在 Mac/Linux
上进行验证测试。[/scode]
以下各软件的安装及配置不在本手册范围内,请自行查阅相关文档。
Java JDK 8
Intellij IDEA 2018.3
Maven 3.3.9
(经测试最新版3.6.2无法正常导入源码)Git
Pentaho Kettle
官方仓库:https://github.com/pentaho/pentaho-kettle
强烈建议选择和下载的发布版本一致的源码分支,本手册以 8.3 为例编写。
打开命令行工具,定位到要存储源码的路径,使用以下 Git 命令克隆源码,并指定 8.3
分支(克隆的目的是为了以后可以同步更新)
git clone -b 8.3 https://github.com/pentaho/pentaho-kettle.git
maven settings.xml
:此文件定义了 kettle
依赖的 pentaho
仓库地址等,下载后存放在任意位置,后面会用到。
右键点此另存为
Import Project
】ok
】Maven
点击 【Next
】Import Maven projects automatically
】项,然后点击【Environment settings
】Maven environment
】窗口中,选择 Maven 3.3.9
所在路径,勾选【User settings file
】后面的【Override
】,然后选择之前下载的 settings.xml
,后面的【Local repository
】为 Maven
的缓存路径,可以修改也可以默认。修改完成后点击【OK
】,然后点击【Next
】Import Project
】窗口直接点击【Next
】Import Project
】窗口勾选仅有的【org.pentaho.di:pdi:8.3.0.0
】后点击【Next
】JDK
,那么先点击新增按钮选择 JDK 8
的路径,选择 JDK 8
后点击【Next
】Next
】IDEA
的主窗口,这时需要联接互联网下载项目所依赖的 jar
包,这个过程可能需要很长时间
,所以耐心等待(可能几个小时时间)。可以点击状态栏的消息查看依赖的加载过程(但看不到进度)。通过 IDEA
的 Terminal
运行以下命令进行编译。
mvn clean install -DskipTests
打包过程仍会下载大量依赖文件,请耐心等待。
如果运气好的话,编译完成如下图,如果运行不好可能会出现条种问题,大多数是网络问题造成的,重新运行命令再试。
最终编译打包后的文件为:<源码目录>\assemblies\pdi-ce\target\pdi-ce-8.3.0.0-SNAPSHOT.zip
IDEA
中打开文件:<源码目录>\ui\src\main\java\org\pentaho\di\ui\spoon\Spoon.java
,点击 class
前面的【运行
】按钮启动项目
这时会启动失败,不过 IDEA
会自动添加一个启动配置,点击工具栏上的启动配置【Spoon
】然后点击【Edit Configurations
】
在打开的【Run/Debug Configurations
】窗口中进行以下设置:
VM options
:-Djava.ext.dirs="lib"
Working directory
:后面追加 dist
在源码目录下新建目录 dist
,在 dist
目录中新建子目录 lib
将之前编译成功的发布包 zip
中的 ui
目录解压至<源码目录>\dist
中
将之前编译成功的发布包 zip
中的 lib
目录下的以下 4
个 jar
文件拷贝到<源码目录>\lib
中:
dom4j-2.1.1.jar
jaxen-1.1.6.jar
slf4j-api-1.7.7.jar
slf4j-nop-1.7.7.jar
Kettle
发布包默认没有提示连接 Sql Server
数据库的驱动,如果需要使用 Sql Server
数据库需要从网上下载 MSSQL
驱动【mssql-jdbc-7.4.1.jre8.jar
】放上述目录。
打开:<源码目录>\ui\pom.xml
,搜索内容:
org.eclipse.swt
org.eclipse.swt.gtk.linux.x86_64
替换为:
org.eclipse.swt
org.eclipse.swt.win32.win32.x86_64
4.6
在 IDEA
中打开菜单【File - Project Structure
】(也可以直接按快捷键:Ctrl+Alt+Shift+S
)
在弹出的【Project Structrue
】窗口中左侧选择【Modules
】,然后在中间选择【kettle-ui-swt
】模块,然后在右侧切换到【Dependencies
】标签页,拖动右侧滚动条至大约快到底部的位置,找到【Maven:org.eclipse.swt:org.eclipse.swt.win32.win32.x86_64:4.6
】,然后通过鼠标点击并拖动的方式将其移动到【Maven:org.eclipse.swt:org.eclipse.swt.gtk.linux.x86_64:4.6
】的前面,然后点击【ok
】按钮。
配置完成,点击工具栏的启动按钮启动 Spoon
,稍等片刻,将打开 Kettle
界面。
最终 Debug 调试启动界面:
如有需要,可找到对应的代码文件添加断点进行单步调试,以便排查问题。此文档不再展开描述。
解决方案:
可能的原因是使用了高版本的 Maven
,切换底版本(建议3.3.9
)重试。
解决方案:
缺少 slf4j-api-1.7.7.jar
、slf4j-nop-1.7.7.jar
这两个包。
解决方案:
多试几次,或者自己从 Pentaho 官方仓库找到下载失败的下载文件下载后放到 Maven
缓存目录中。
如下载:pentaho-big-data-plugin-8.3.0.0-20191113.103442-390.zip
放到:D:\Maven\Repository\pentaho\pentaho-big-data-plugin\8.3.0.0-SNAPSHOT\
解决方案:
确认 kettle-ui-swt
项目依赖项中 win
和 linx
的 swt
包的加载顺序。
org.eclipse.swt.win32.win32.x86_64
需移动到 org.eclipse.swt.gtk.linux.x86_64
的前面。
需要注意:每次 Maven
重新 Import
后调整过的顺序会被还原,需要再次手动调整。
可能会遇到各种各样的 ClassNotFoundException
,遇到这个错就查看一下缺少哪个 jar
包,从发布包的 lib
目录中搜索找到需要的 jar
包后拷贝到<源码目录>\dist\lib
即可。
比如 json 输出/输出
现在是以插件的方式运行的,默认调试启动的 Kettle
是没有 JSON
的,调试运行插件的方法也很简单。
在 dist
目录下新建 plugins
目录,然后从编译的发布包中解压出 plugins
中对应的插件放到这个目录中即可。
放上插件后调试运行可能又会报各种 ClassNotFoundException
,不要着急,按上面讲的解决方案慢慢处理。