首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动时Apache NiFi自定义NAR NoClassDefFoundError

启动时Apache NiFi自定义NAR NoClassDefFoundError
EN

Stack Overflow用户
提问于 2019-03-02 22:07:28
回答 4查看 1.5K关注 0票数 1

我试图在我的NiFi安装中安装一个自定义NAR控制器服务包,但是在启动时会得到这个错误。它的行为就像它无法从RecordReaderFactory中找到nifi-record-serialization-service-api类一样,尽管它是作为一个依赖项包含的:

代码语言:javascript
运行
复制
<dependency>
   <groupId>org.apache.nifi</groupId>
   <artifactId>nifi-record-serialization-service-api</artifactId>
   <version>1.9.0</version>
</dependency>

这里是一个项目: https://github.com/adamfisher/nifi-zonefile-record-serialization-service

运行maven install可以成功地构建NAR。当我启动NiFi时,它就会产生这个错误。我很确定这是一个maven POM配置问题。我只是没有过多地使用Java,并且希望有人能解释一下为什么它没有找到它需要的依赖类?

nifi-app.log:

代码语言:javascript
运行
复制
2019-03-02 15:22:15,245 INFO [main] org.apache.nifi.web.server.JettyServer Loading WAR: D:\nifi\NIFI-1~2.0\.\work\nar\framework\nifi-framework-nar-1.9.0.nar-unpacked\NAR-INF\bundled-dependencies\nifi-web-error-1.9.0.war with context path set to /
2019-03-02 15:22:15,261 INFO [main] org.apache.nifi.web.server.JettyServer Running in HTTP mode; host headers not restricted
2019-03-02 15:22:16,386 ERROR [main] org.apache.nifi.NiFi Failure to launch NiFi due to java.lang.NoClassDefFoundError: org/apache/nifi/serialization/RecordReaderFactory
java.lang.NoClassDefFoundError: org/apache/nifi/serialization/RecordReaderFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at org.apache.nifi.nar.StandardExtensionDiscoveringManager.loadExtensions(StandardExtensionDiscoveringManager.java:152)
    at org.apache.nifi.nar.StandardExtensionDiscoveringManager.discoverExtensions(StandardExtensionDiscoveringManager.java:127)
    at org.apache.nifi.nar.StandardExtensionDiscoveringManager.discoverExtensions(StandardExtensionDiscoveringManager.java:113)
    at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:925)
    at org.apache.nifi.NiFi.<init>(NiFi.java:158)
    at org.apache.nifi.NiFi.<init>(NiFi.java:72)
    at org.apache.nifi.NiFi.main(NiFi.java:297)
Caused by: java.lang.ClassNotFoundException: org.apache.nifi.serialization.RecordReaderFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 23 common frames omitted
2019-03-02 15:22:16,387 INFO [Thread-1] org.apache.nifi.NiFi Initiating shutdown of Jetty web server...
2019-03-02 15:22:16,387 INFO [Thread-1] org.apache.nifi.NiFi Jetty web server shutdown completed (nicely or otherwise).
EN

回答 4

Stack Overflow用户

发布于 2019-03-04 14:13:58

NAR依赖项在运行时用于创建父类加载器链。所以在你的例子中

-> (取决于)

-> (取决于)

nifi-标准-服务-api-nar

在运行中的应用程序中,当它从服务NAR实例化记录读取器的实例时,它需要加载来自服务API的实现的接口,然后该接口需要加载来自标准服务API的RecordReader接口。

票数 2
EN

Stack Overflow用户

发布于 2020-04-24 21:25:32

我花了很多时间在这件事上。最后,我有一个可行的解决方案。我的自定义处理器正在为传入流使用RecordReader。但是,编译或包在maven进程中失败。我必须按以下方式定制pom.xml:

代码语言:javascript
运行
复制
<dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-record-serialization-service-api</artifactId>
        <version>${nifi.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.nifi</groupId>
        <artifactId>nifi-record-serialization-services-nar</artifactId>
        <version>${nifi.version}</version>
        <type>nar</type>
    </dependency>
票数 1
EN

Stack Overflow用户

发布于 2019-03-03 04:26:01

最后,我也需要包含appear文件,尽管它似乎没有在任何地方使用。它只是一个名为MyService的通用模板类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54963492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档