本手册描述了开源 ETL 工具 Kettle 8.3 源码编译打包及 Debug 调试运行的详细步骤。

本手册编写的目的主要为了应对以下场景:在使用开源的 Kettle 过程中如有个性化需求需要自定义部分功能模块,或者发现系统 Bug 且官方未及时提供修复时,我们需要修改源码并且重新编译打包运行。更多的时候我们需要通过 Debug 调试运行的方式来排查问题。

版权声明:本文为「微酷网」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://weiku.co/article/431/
CSDN:https://blog.csdn.net/ifu25/article/details/103239489

1、环境要求

[scode type=“green”]本手册基于 Win10 64 位操作系统编写,未在 Mac/Linux 上进行验证测试。[/scode]

以下各软件的安装及配置不在本手册范围内,请自行查阅相关文档。

  • Java JDK 8
  • Intellij IDEA 2018.3
  • Maven 3.3.9 (经测试最新版3.6.2无法正常导入源码)
  • Git

2、源码下载

Pentaho Kettle 官方仓库:https://github.com/pentaho/pentaho-kettle

强烈建议选择和下载的发布版本一致的源码分支,本手册以 8.3 为例编写。

2019112514520.png

1) 克隆源码:

打开命令行工具,定位到要存储源码的路径,使用以下 Git 命令克隆源码,并指定 8.3 分支(克隆的目的是为了以后可以同步更新)

git clone -b 8.3 https://github.com/pentaho/pentaho-kettle.git

2) 下载官方的 maven settings.xml

此文件定义了 kettle 依赖的 pentaho 仓库地址等,下载后存放在任意位置,后面会用到。

右键点此另存为

3、IDEA 导入项目

  1. 打开IDEA,选择【Import Project

2019112514554.png

  1. 定位到源码所在目录点击【ok

20191125145552.png

  1. 选择 Maven 点击 【Next

20191125145633.png

  1. 勾选【Import Maven projects automatically】项,然后点击【Environment settings

2019112514579.png

  1. 在弹出的【Maven environment】窗口中,选择 Maven 3.3.9 所在路径,勾选【User settings file】后面的【Override】,然后选择之前下载的 settings.xml,后面的【Local repository】为 Maven 的缓存路径,可以修改也可以默认。修改完成后点击【OK】,然后点击【Next

20191125145929.png

  1. 在【Import Project】窗口直接点击【Next

20191125145954.png

  1. 在【Import Project】窗口勾选仅有的【org.pentaho.di:pdi:8.3.0.0】后点击【Next

2019112515028.png

  1. 如果之前没有配置过 JDK,那么先点击新增按钮选择 JDK 8 的路径,选择 JDK 8 后点击【Next

2019112515153.png

  1. 项目名称和位置不用修改,直接点击【Next

20191125_150928.png

  1. 之后会打开 IDEA 的主窗口,这时需要联接互联网下载项目所依赖的 jar 包,这个过程可能需要很长时间,所以耐心等待(可能几个小时时间)。可以点击状态栏的消息查看依赖的加载过程(但看不到进度)。

20191125_151014.png

  1. 导入完成后如下图

20191125_151021.png

4、编译打包

通过 IDEATerminal 运行以下命令进行编译。

mvn clean install -DskipTests

20191125_151112.png

打包过程仍会下载大量依赖文件,请耐心等待。

20191125_151135.png

如果运气好的话,编译完成如下图,如果运行不好可能会出现条种问题,大多数是网络问题造成的,重新运行命令再试。

20191125_151151.png

最终编译打包后的文件为:<源码目录>\assemblies\pdi-ce\target\pdi-ce-8.3.0.0-SNAPSHOT.zip

20191125_151214.png

5、Debug 调试运行

IDEA 中打开文件:<源码目录>\ui\src\main\java\org\pentaho\di\ui\spoon\Spoon.java,点击 class 前面的【运行】按钮启动项目

20191125_151331.png

这时会启动失败,不过 IDEA 会自动添加一个启动配置,点击工具栏上的启动配置【Spoon】然后点击【Edit Configurations

20191125_152440.png

在打开的【Run/Debug Configurations】窗口中进行以下设置:

  • VM options-Djava.ext.dirs="lib"
  • Working directory:后面追加 dist

20191125_152630.png

在源码目录下新建目录 dist,在 dist 目录中新建子目录 lib
将之前编译成功的发布包 zip 中的 ui 目录解压至<源码目录>\dist
将之前编译成功的发布包 zip 中的 lib 目录下的以下 4jar 文件拷贝到<源码目录>\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】放上述目录。

20191125_152832.png

20191125_152951.png

打开:<源码目录>\ui\pom.xml,搜索内容:

<dependency>
  <groupId>org.eclipse.swt</groupId>
  <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
</dependency>

替换为:

<dependency>
  <groupId>org.eclipse.swt</groupId>
  <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
  <version>4.6</version>
</dependency>

20191125_153125.png

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】按钮。

20191125_153228.png

配置完成,点击工具栏的启动按钮启动 Spoon,稍等片刻,将打开 Kettle 界面。
最终 Debug 调试启动界面:

20191125_153337.png

如有需要,可找到对应的代码文件添加断点进行单步调试,以便排查问题。此文档不再展开描述。

6、常见问题

1、IDEA 导入项目失败

20191125_153554.png

解决方案:

可能的原因是使用了高版本的 Maven,切换底版本(建议3.3.9)重试。

2、Failed to load class “org.slf4j.impl.StaticLoggerBinder”

20191125_153624.png

解决方案:

缺少 slf4j-api-1.7.7.jarslf4j-nop-1.7.7.jar 这两个包。

3、编译过程中下载大文件网络出错

20191125_153653.png

解决方案:

多试几次,或者自己从 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\

4、Cant’t load library:C:\Users\Admin.swt\lib\win32\x86_64\swt-gtk.dll

20191125_153852.png

解决方案:

确认 kettle-ui-swt 项目依赖项中 winlinxswt 包的加载顺序。
org.eclipse.swt.win32.win32.x86_64 需移动到 org.eclipse.swt.gtk.linux.x86_64 的前面。

需要注意:每次 Maven 重新 Import 后调整过的顺序会被还原,需要再次手动调整。

5、各种 ClassNotFoundException

可能会遇到各种各样的 ClassNotFoundException,遇到这个错就查看一下缺少哪个 jar 包,从发布包的 lib 目录中搜索找到需要的 jar 包后拷贝到<源码目录>\dist\lib即可。

比如微酷被这个异常折磨了好久:
20191125_154331.png

7、插件

比如 json 输出/输出现在是以插件的方式运行的,默认调试启动的 Kettle 是没有 JSON 的,调试运行插件的方法也很简单。

dist 目录下新建 plugins 目录,然后从编译的发布包中解压出 plugins 中对应的插件放到这个目录中即可。

20191125154747803.png

放上插件后调试运行可能又会报各种 ClassNotFoundException,不要着急,按上面讲的解决方案慢慢处理。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐