Apache NiFi Custom NAR NoClassDefFoundError durante el inicio

Estoy intentando instalar un paquete de servicio de controlador NAR personalizado en mi instalación de NiFi pero aparece este error durante el inicio. Actúa como si no pudiera encontrar la RecordReaderFactoryclase nifi-record-serialization-service-apia pesar de que se incluye como una dependencia:

<dependency>
   <groupId>org.apache.nifi</groupId>
   <artifactId>nifi-record-serialization-service-api</artifactId>
   <version>1.9.0</version>
</dependency>

Aquí está el proyecto: https://github.com/adamfisher/nifi-zonefile-record-serialization-service

La ejecución maven installconstruye el NAR con éxito. Es solo cuando inicio NiFi, me da este error. Estoy bastante seguro de que este es un problema de configuración de POM maven. Simplemente no trabajo demasiado con Java y espero que alguien pueda arrojar algo de luz sobre por qué no encuentra la clase dependiente que necesita.

nifi-app.log:

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).
Respuesta 1

Las dependencias NAR se utilizan en tiempo de ejecución para crear una cadena de cargadores de clases principales. Entonces en tu ejemplo tienes

nifi-zonefile-record-serialization-service-nar -> (depende de)

nifi-zonefile-record-serialization-service-api-nar -> (depende de)

nifi-standard-services-api-nar

En la aplicación en ejecución, cuando instancia la instancia de su lector de registros de su NAR de servicio, entonces necesita cargar la interfaz que implementa que proviene de su API de servicio NAR, que luego necesita cargar la interfaz RecordReader que proviene de la API de servicios estándar NAR.

Respuesta: 2

Entonces, necesito hacer un código que haga que el tamaño de un texto, pdf, jpg, ... sea igual o igual a 1474560 (tamaño de un disquete). La pregunta es cómo hacer esta limitación para que el archivo de escritura se detenga hasta ...

Estoy trabajando en un tablero de tictactoe para practicar haciendo clases y me he encontrado con un problema con mi algoritmo. parece estar devolviendo el mejor movimiento ofensivo, pero no juega a la defensa. no lo sé ...

En un proyecto escolar, codificamos la implementación de un juego en Java y mostramos el juego real a través de Angular. Hemos codificado el objeto del juego que representa el juego real e hicimos un "GameResource" ...

Estoy tratando de ejecutar un proyecto Vaadin en Google Cloud Platform usando Google Cloud Platform (un complemento en Eclipse). Después de ejecutar me sale esta excepción: ADVERTENCIA: Error en la serialización del ...