问题:java调用kettle出现Can't run transformation due to plugin missing
在spoon启动的客户端中可以使用的组件运行没问题,但是在java集成的kettle环境下,出现上述的错误。
案例:以kettle调用kafka为案例,并集成在java定时调度中执行kettle配置的脚本文件。
1、配置kettle调用kafka插件流程
使用spoon.bat启动的kellte客户端自带的kafka插件,可以正常完成消息的发送和接收,但是在java集成kettle调用配置好的脚本时候,报Can't run transformation due to plugin missing错误,不能正常使用。
2、问题原因:
java集成调用kettle项目中缺少引用对应功能的插件,而kettle的客户端默认是有的,kettle客户端自身的插件主要存放在以下文件夹下:
1、data-integration\plugins(Kettle核心相关的插件);
2、data-integration\system\karaf\system\pentaho(大数据相关的插件)。
3、解决方案:
找到原因后,我们需要按照指定文件夹路径,找到对应的plugin插件,配置指定的路径,在启动之前引用加载即可。例如如下:
// 加载出Kettle核心相关插件
String kettleHome="D:\\soft\\kettle9.3\\data-integration";
StepPluginType.getInstance().getPluginFolders()
.add(new PluginFolder(kettleHome,
false, true));
//支持大数据相关的插件
//支持kafka
StepPluginType.getInstance().getPluginFolders()
.add(new PluginFolder(kettleHome+
"\\system\\karaf\\system\\pentaho\\pentaho-big-data-kettle-plugins-kafka",
false, true));
顺便把jar报引用到maven中:
<!--支持kafka插件-->
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-big-data-kettle-plugins-kafka</artifactId>
<version>9.3.0.0-428</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-metastore-locator-api</artifactId>
<version>9.3.0.0-428</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.2</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency
注意:版本最好与kettle客户端插件中的版本保持一致,可以去data-integration\lib或插件jar中去查看。一定要放在KettleEnvironment.init()之前,否则不会生效,追加之后完美解决问题。
同理,此方法可解决Mongodb等其他插件缺失错误。
更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。