我尝试使用java执行转换文件,转换从数据库获取数据并通过s3输出文件步骤将数据打印到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)
通过在
之前添加插件路径来工作 KettleEnvironment.init();
添加插件路径
StepPluginType.getInstance().getPluginFolders().add(new PluginFolder("/home/ali/data-integration/plugins", false, true));
仅当我执行以下操作时才有效:
1) 添加了以下变量,将数据集成插件文件夹指向 VM 参数:
-DKETTLE_PLUGIN_BASE_FOLDERS=path_to_your_data-integration/plugin
2)这还不够,因为当我添加 jar 时,我的插件文件夹缺少 mongodb jar pentaho-mongo-utils-8.2.0.0-342.jar(请注意,jar 可能会根据您的版本而有所不同)瞄准)它起作用了。
添加了 StepPluginType.getInstance().getPluginFolders().add(new PluginFolder("/home/ali/data-integration/plugins", false, true)); 运行过程中会报错,但是能成功运行。报错信息为 java.lang.reflect.InaccessibleObjectException:无法使字段私有静态最终 sun.net.www.protocol.jar.JarFileFactory sun.net.www.protocol.jar.JarURLConnection.factory 可访问:模块 java.base 不“打开 sun” .net.www.protocol.jar”到未命名模块@2f465398