Pentaho Kettle 8.3 源码编译打包及 Debug 调试运行(图文教程)
本手册描述了开源 ETL 工具 Kettle 8.3 源码编译打包及 Debug 调试运行的详细步骤。本手册编写的目的主要为了应对以下场景:在使用开源的 Kettle 过程中如有个性化需求需要自定义部分功能模块,或者发现系统 Bug 且官方未及时提供修复时,我们需要修改源码并且重新编译打包运行。更多的时候我们需要通过 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 为例编写。
1) 克隆源码:
打开命令行工具,定位到要存储源码的路径,使用以下 Git 命令克隆源码,并指定 8.3
分支(克隆的目的是为了以后可以同步更新)
git clone -b 8.3 https://github.com/pentaho/pentaho-kettle.git
2) 下载官方的 maven settings.xml
:
此文件定义了 kettle
依赖的 pentaho
仓库地址等,下载后存放在任意位置,后面会用到。
3、IDEA 导入项目
- 打开IDEA,选择【
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
包,这个过程可能需要很长时间
,所以耐心等待(可能几个小时时间)。可以点击状态栏的消息查看依赖的加载过程(但看不到进度)。
- 导入完成后如下图
4、编译打包
通过 IDEA
的 Terminal
运行以下命令进行编译。
mvn clean install -DskipTests
打包过程仍会下载大量依赖文件,请耐心等待。
如果运气好的话,编译完成如下图,如果运行不好可能会出现条种问题,大多数是网络问题造成的,重新运行命令再试。
最终编译打包后的文件为:<源码目录>\assemblies\pdi-ce\target\pdi-ce-8.3.0.0-SNAPSHOT.zip
5、Debug 调试运行
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
,搜索内容:
<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>
在 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 调试启动界面:
如有需要,可找到对应的代码文件添加断点进行单步调试,以便排查问题。此文档不再展开描述。
6、常见问题
1、IDEA 导入项目失败
解决方案:
可能的原因是使用了高版本的 Maven
,切换底版本(建议3.3.9
)重试。
2、Failed to load class “org.slf4j.impl.StaticLoggerBinder”
解决方案:
缺少 slf4j-api-1.7.7.jar
、slf4j-nop-1.7.7.jar
这两个包。
3、编译过程中下载大文件网络出错
解决方案:
多试几次,或者自己从 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
解决方案:
确认 kettle-ui-swt
项目依赖项中 win
和 linx
的 swt
包的加载顺序。
org.eclipse.swt.win32.win32.x86_64
需移动到 org.eclipse.swt.gtk.linux.x86_64
的前面。
需要注意:每次 Maven
重新 Import
后调整过的顺序会被还原,需要再次手动调整。
5、各种 ClassNotFoundException
可能会遇到各种各样的 ClassNotFoundException
,遇到这个错就查看一下缺少哪个 jar
包,从发布包的 lib
目录中搜索找到需要的 jar
包后拷贝到<源码目录>\dist\lib
即可。
比如微酷被这个异常折磨了好久:
7、插件
比如 json 输出/输出
现在是以插件的方式运行的,默认调试启动的 Kettle
是没有 JSON
的,调试运行插件的方法也很简单。
在 dist
目录下新建 plugins
目录,然后从编译的发布包中解压出 plugins
中对应的插件放到这个目录中即可。
放上插件后调试运行可能又会报各种 ClassNotFoundException
,不要着急,按上面讲的解决方案慢慢处理。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)