线程“main”中的异常java.lang.NoClassDefFoundError:org / kie / api / KieServices $ Factory

时间:2018-06-01 05:59:34

标签: java eclipse maven apache-spark drools

我在eclipse中创建了一个spark maven java项目。

我已将所有drools二进制文件添加为外部jar。

在我的pom.xml中,我为drools定义了以下依赖项。

的pom.xml

<dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
            <version>7.7.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>7.7.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>7.7.0.Final</version>
        </dependency>

在我的代码中,我使用了以下类:

KieServices ks = KieServices.Factory.get();

当我使用spark-submit命令

运行此程序时
spark-submit --class Transformation --master local "C:\Users\xyz\SparkWorkspace\Transformation\target\Transformation-0.0.1-SNAPSHOT.jar"

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/kie/api/KieServices$Factory
        at Transformation.main(Transformation.java:40)
        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.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:87
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.kie.api.KieServices$Factory
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 11 more

我无法找到任何相同的理由,因为我添加了必需的libs和maven依赖项。

有人可以帮忙吗?我是否需要在火花环境中为drools设置任何东西?

修改

在.m2文件夹下我也可以看到这些maven依赖jar文件。

并使用反编译器我检查了KieServices接口中是否存在Factory静态内部类。

那为什么在运行时会出现这个错误?

0 个答案:

没有答案