解决java调用kettle,JSON input 缺少依赖问题
问题描述
我用kettle工具创建了一个转换文件.ktr,其中包含一个json input组件, 本地执行ktr文件能正常转换数据。当使用java代码调用ktr文件时报错:Can’t run transformation due to plugin missing
本地调用的解决方案
百度得到的解决办法基本差不多,在初始化代码KettleEnvironment.init();前增加一行引入依赖的代码:
StepPluginType.getInstance().getPluginFolders().
add(new PluginFolder(“D:\Program Files (x86)\kettle\data-integration\plugins\kettle-json-plugin”, false, true));
“D:\Program Files (x86)\kettle\data-integration\plugins\kettle-json-plugin”,这个路径为我电脑上缺失的json input依赖路径,如果是缺失其它依赖也可依照此方式解决。依赖地址可以到kettle安装路径的plugins文件夹下寻找。
如果只是止步于本地调试,上面的方法已经解决问题了。但如果要将代码打包并部署到服务器上,就有可能遇到下面的问题了。
部署到服务器上的解决方案
我是沿用本地调用方案,只是替换掉本地路径。
将整个json input的依赖文件夹kettle-json-plugin,放在项目resource目录下,通过this.getClass().getClassLoader().getResource()方式拿到kettle-json-plugin的路径,经测试仍然报错。打包上传到服务器测试一样报错。
然后发现只要依赖文件夹kettle-json-plugin处于classes文件夹下,就会报错。急于解决该问题,就用了比较简单粗暴的方式,将文件夹kettle-json-plugin直接复制到打好的war包下:放在classes外面
然后将路径直接写死到wabapps/项目下,再测试就OK了。
当然感觉这不是很好的解决方式,期待网友给出更好的解决方案。