本工程构建的源码是按 kettle 8.2.0.7 源码导入的,试过 kettle 9 的源码因为编译出来有很多功能无法使用,所以选择 kettle 8 的版本源码。使用IDEA2022开发工具导入工程,JDK8。
源码下载路径:https://github.com/pentaho/pentaho-kettle/tree/8.2.0.7-C232
需要在maven 的配置文件中增加 pluginRepository 路径 https://repo.maven.apache.org/maven2/
maven 的 配置文件
配置DEBUG源码有三种方法:
1. 网上已有的方法
是按 maven 导入IDEA 开发环境以后 模块名 kettle-ui-swt 项目上选择所需的依赖包 ,然后启动类 org.pentaho.di.ui.spoon.Spoon 这种方式就算指定所需所有依赖包也不能完全启动整个工程,因为 kettle 工程用到了 osgi 框架,OSGIPluginRegistryExtension 插件扩展类不能启动成功。如图加入对应的依赖包:
2. 启动远程调用方式
远程 debug 程序,首先需要编译源码生成发布的包编译命令可以参考 README.md 中的给出的命令 :
mvn clean install -DskipTests
编译生成 pdi-ce-8.2.0.7-C232.zip 拷贝到其他目录解压出来。然后修改文件 Spoon.bat 增加 远程调试命令:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6666 加在启动命令中。
同时服务端配置远程调试:
而这种方式问题是输出端不能输出日志,不利于定位问题。
3. 通过 org.pentaho.commons.launcher.Launcher 启动 kettle 工程
首先需要编译源码生成发布的包编译命令可以参考 README.md 中的给出的命令: mvn clean install -DskipTests
解压到特定的目录下。然后查看启动的 kettle 工程的命令:
start "Spoon" "D:\tools\java-8-291\bin\javaw.exe" "-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
"-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2"
"-Djava.library.path=libswt\win64"
"-DKETTLE_HOME="
"-DKETTLE_REPOSITORY="
"-DKETTLE_USER="
"-DKETTLE_PASSWORD="
"-DKETTLE_PLUGIN_PACKAGES="
"-DKETTLE_LOG_SIZE_LIMIT="
"-DKETTLE_JNDI_ROOT="
-jar launcher\launcher.jar -lib ..\libswt\win64
根据以上的命令可知 launcher.jar 启动整个 kettle 程序的 ,然后查找 launcher.jar 中的类 org.pentaho.commons.launcher.Launcher 引用 pentaho-application-launcher-8.2.0.7-719-sources.jar 将这个包解压出来,按 maven 导入 IDEA 的模块,导入后如下:
然后配置这模块为 debug 模式启动类:
Working directory :E:\workspace\home\pdi-ce-8.2.0.7-719\data-integration 就是压缩包解压出来的路径。
VM options 配置参数 :
-Xms512m
-Xmx1024m
-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
-Djava.library.path=libswt\win64
-DKETTLE_HOME=
-DKETTLE_REPOSITORY=
-DKETTLE_USER=
-DKETTLE_PASSWORD=
-DKETTLE_PLUGIN_PACKAGES=
-DKETTLE_LOG_SIZE_LIMIT=
-DKETTLE_JNDI_ROOT=
以这种方式启动程序,可以在任何地方打断点,并且 Consle 中输出日志。
需要配置文件,与工程配置,请留言。后面会分析启动过程与插件管理分析。