此文章发布于34
个月前,部分信息可能已经过时
,请自行斟酌确认。
本手册描述了开源 ETL
工具 Kettle 8.3
源码编译打包及 Debug
调试运行的详细步骤。
本手册编写的目的主要为了应对以下场景:在使用开源的 Kettle 过程中如有个性化需求需要自定义部分功能模块,或者发现系统 Bug 且官方未及时提供修复时,我们需要修改源码并且重新编译打包运行。更多的时候我们需要通过 Debug 调试运行的方式来排查问题。
1、环境要求
Win10 64
位操作系统编写,未在 Mac/Linux
上进行验证测试。以下各软件的安装及配置不在本手册范围内,请自行查阅相关文档。
Java JDK 8
Intellij IDEA 2018.3
Maven 3.3.9
(经测试最新版3.6.2无法正常导入源码)Git
2、源码下载
Pentaho Kettle
官方仓库:https://github.com/pentaho/pentaho-kettle
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
】
2) 定位到源码所在目录点击【ok
】
3) 选择 Maven
点击 【Next
】
4) 勾选【Import Maven projects automatically
】项,然后点击【Environment settings
】
5) 在弹出的【Maven environment
】窗口中,选择 Maven 3.3.9
所在路径,勾选【User settings file
】后面的【Override
】,然后选择之前下载的 settings.xml
,后面的【Local repository
】为 Maven
的缓存路径,可以修改也可以默认。修改完成后点击【OK
】,然后点击【Next
】
6) 在【Import Project
】窗口直接点击【Next
】
7) 在【Import Project
】窗口勾选仅有的【org.pentaho.di:pdi:8.3.0.0
】后点击【Next
】
8) 如果之前没有配置过 JDK
,那么先点击新增按钮选择 JDK 8
的路径,选择 JDK 8
后点击【Next
】
9) 项目名称和位置不用修改,直接点击【Next
】
10) 之后会打开 IDEA
的主窗口,这时需要联接互联网下载项目所依赖的 jar
包,这个过程可能需要很长时间
,所以耐心等待(可能几个小时时间)。可以点击状态栏的消息查看依赖的加载过程(但看不到进度)。
11) 导入完成后如下图
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:UsersAdmin.swtlibwin32x86_64swt-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
,不要着急,按上面讲的解决方案慢慢处理。
原文链接:https://weiku.co/article/431/
CSDN链接:https://blog.csdn.net/ifu25/article/details/103239489
大哥,冲着您的这篇文章,我一定要给您点赞!!!帮大忙了,这个运行流程属实是太繁琐了,自己摸索的差点自闭
😀
我下载9.0的源码,maven编译的时候,提示parent对应的pentaho-ce-jar-parent-pom不存在,去掉后就提示好多jar包缺少版本号。。。。
<parent>
<groupId>org.pentaho</groupId> <artifactId>pentaho-ce-jar-parent-pom</artifactId> <version>9.0.0.0-423</version></parent>
现在又出现一个新的问题。跑起来的spoon左上角没有repository资源库的链接按钮了。
不知博主是否有思路如何解决这个问题。
最终是通过在 项目结构-》模块-》kettle-ui-swt-》依赖中之家添加jar包解决。commands-3.3.0-3.3.0-I20070605-0010
不知道是否还有更优雅的方式
你好,请教个问题
有没有遇到这个问题
maven多个子module报这个错
org.eclipse.core:commands:3.3.0(omitted for conflict with 3.3.0-I20070605-0010
按照您上面的配置运行Spoon,报下面的错
错误:(1827, 72) java: 无法访问org.eclipse.core.commands.common.EventManager
找不到org.eclipse.core.commands.common.EventManager的类文件
您建议如何解决这个问题,请教一个思路。
你这个问题我没遇到过,看看文章【常见问题】中第 5 点是否对你有帮助,我能力也有限。
GoodJob
非常完整,支持原创
感谢支持~