Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)

本手册描述了开源 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 为例编写。

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第1张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第2张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第3张图片

  1. 选择 Maven 点击 【Next

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第4张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第5张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第6张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第7张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第8张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第9张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第10张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第11张图片

  1. 导入完成后如下图

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第12张图片

4、编译打包

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

mvn clean install -DskipTests

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第13张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第14张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第15张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第16张图片

5、Debug 调试运行

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第17张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第18张图片

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

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第19张图片

在源码目录下新建目录 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】放上述目录。

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第20张图片

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第21张图片

打开:<源码目录>\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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第22张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第23张图片

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第24张图片

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

6、常见问题

1、IDEA 导入项目失败

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第25张图片

解决方案:

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

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第26张图片

解决方案:

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

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第27张图片

解决方案:

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第28张图片

解决方案:

确认 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即可。

比如微酷被这个异常折磨了好久:
Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第29张图片

7、插件

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

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

Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)_第30张图片

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

你可能感兴趣的:(Java)