由于本地 Maven 依赖项 jar 中的 java.lang.NoClassDefFoundError,Apache Nifi 失败。

Apache Nifi failure due to java.lang.NoClassDefFoundError in a local maven dependency jar.

第一次使用maven,想实现一个apache-nifi的处理器。现在为此,我正在使用一个专有的 jar 文件,它是一个 SDK。它不在存储库中。因此,我将其放在 pom.xml 中,如下所示。

<dependency>
        <groupId>KS</groupId>
        <artifactId>En-SDK</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/En-SDK-Java.jar</systemPath>
</dependency>

我正在使用 intelliJ,导入此依赖项似乎没有问题。 Maven 构建过程也是如此。

我按照 this tutorial 中的说明使用 mvn clean install。这给了我一个 nar 包作为输出。 (没有构建错误)

本应放在 $NIFI_HOME/lib 目录中的 nar 并未捆绑上述本地 jar。

如果我将这个 nar 文件放在所需的目录中并启动 apache-nifi,

 INFO [main] org.apache.nifi.nar.NarClassLoaders Loaded NAR file: /..././work/nar/extensions/myNar.nar

似乎由 NarClassLoaders 加载,但之后我得到一个异常并且 nifi 没有启动。

java.lang.NoClassDefFoundError: com/kls/../../SubscriptionInterface

SubscriptionInterface 是上述本地 jar 中的 class。

如果我查看 nar 文件的文件夹结构,在 META-INF/bundled-dependencies/ 中我会看到 pom 中定义的所有其他依赖 jar 文件,但不是我使用的本地 jar。

如何克服这个问题?

以下 Whosebug 问题似乎与您提出的问题类似。 Maven 2 assembly with dependencies: jar under scope "system" not included

尝试将依赖项放在本地存储库中并在 pom 中声明它。