运行 Java 中的 *.ktr 抛出 KettleMissingPluginsException - 为什么?

Running *.ktr in Java throws KettleMissingPluginsException - Why?

我创建了各种数据转换(*.ktr 文件),当从 Spoon GUI (PDI-CE 5.4.0.1-130; Windows 7) 启动时 运行 非常完美。

我尝试使用以下代码(接近文档中的示例代码)从 Java 运行 它们:

KettleClientEnvironment.init();
TransMeta metaData = new TransMeta("C:\examplepath\test.ktr");

Trans transformation = new Trans(metaData);
transformation.execute(null);
transformation.waitUntilFinished();
...

执行时,出现以下异常:

org.pentaho.di.core.exception.KettleMissingPluginsException: 
Missing plugins found while loading a transformation

Step : CsvInput
Step : XMLOutput
    at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:2882)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2718)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2670)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2647)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2627)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2592)
    at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2555)
    at (caller method in my code)

由于我没有使用任何插件,只使用了原生步骤(在本例中为 CsvInput、XMLOutput),我不明白抛出异常的原因。为什么抛出它以及如何将代码修复为 运行?

我可能缺少 maven 依赖项吗?我使用以下存储库 http://repository.pentaho.org/content/groups/omni/ 和依赖项:

<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-core</artifactId>
    <version>5.4.0.1-130</version>
</dependency>
<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-engine</artifactId>
    <version>5.4.0.1-130</version>
</dependency>
<dependency>
    <groupId>pentaho-kettle</groupId>
    <artifactId>kettle-ui-swt</artifactId>
    <version>5.4.0.1-130</version>
</dependency>
<dependency>
    <groupId>pentaho-library</groupId>
    <artifactId>libformula</artifactId>
    <version>5.4.0.1-130</version>
</dependency>

非常感谢您的回答。

我不小心使用了 KettleClientEnvironment.init() 但我应该使用 KettleEnvironment.init()。因此,环境未正确初始化而触发了异常。哇。这是菜鸟犯的错误:)

更正后的代码,也可以在 Kettle 文档和 Rishu 的示例中找到:

KettleEnvironment.init();
TransMeta metaData = new TransMeta("C:\examplepath\test.ktr");

Trans transformation = new Trans(metaData);
transformation.execute(null);
transformation.waitUntilFinished();
...

感谢 lufki 和 Rishu 的评论和指点。