我尝试使用java执行转换文件,转换从数据库获取数据并通过s3输出文件step.it在s3中将数据打印到文件。在使用spoon运行时工作正常,但是当尝试在java应用程序中运行时会出现以下错误
Can't run transformation due to plugin missing
java代码
KettleEnvironment.init();
URL ktrUrl = PipelineResource.class.getClassLoader().getResource(tempFile.getAbsolutePath());
TransMeta transMeta = new TransMeta(ktrUrl.getPath());
Trans trans = new Trans(transMeta);
trans.execute(new String[]{});
trans.waitUntilFinished();
if (trans.getErrors() > 0) {
完整堆栈跟踪
2017/06/29 12:46:11 - S3 File Output.0 - ERROR (version 7.0.0.6-95, build
1 from 2017-05-23 03.01.13 by buildguy) : Can't run transformation due to
plugin missing2017/06/29 12:46:11 - S3 File Output.0 - ERROR (version
7.0.0.6-95, build 1 from 2017-05-23 03.01.13 by buildguy) : Error
initializing step [S3 File Output]
2017/06/29 12:46:11 - transformation1 - ERROR (version 7.0.0.6-95, build 1
from 2017-05-23 03.01.13 by buildguy) : Step [S3 File Output.0] failed to
initialize!
2017/06/29 12:46:11 - data from asset.0 - Finished reading query, closing
connection.
2017-06-29 12:46:11.048 ERROR 22396 --- [ XNIO-2 task-2]
com.innvo.aop.logging.LoggingAspect : Exception in
com.innvo.web.rest.PipelineResource.runPipeline() with cause = 'NULL' and
exception = '
We failed to initialize at least one step. Execution can not begin!'
org.pentaho.di.core.exception.KettleException:
We failed to initialize at least one step. Execution can not begin!
at org.pentaho.di.trans.Trans.prepareExecution(Trans.java:1157)
at org.pentaho.di.trans.Trans.execute(Trans.java:627)
at com.innvo.web.rest.PipelineResource.runPipeline(PipelineResource.java:201)
at com.innvo.web.rest.PipelineResource$$FastClassBySpringCGLIB$$81033db7.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
at com.innvo.aop.logging.LoggingAspect.logAround(LoggingAspect.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)
答案 0 :(得分:1)
通过在
之前添加插件路径来工作 KettleEnvironment.init();
添加插件路径
StepPluginType.getInstance().getPluginFolders().add(new PluginFolder("/home/ali/data-integration/plugins", false, true));
答案 1 :(得分:0)
只有在执行以下操作时,它才有效:
1)添加了以下变量,这些变量将数据集成插件文件夹指向VM参数:
-DKETTLE_PLUGIN_BASE_FOLDERS=path_to_your_data-integration/plugin
2)这还不够,因为当我添加jar pentaho-mongo-utils-8.2.0.0-342.jar 时,我的插件文件夹缺少了mongodb jar(请注意,jar可能会有所不同)。