Is anyone successfully using NiFi RPMs?  I am having trouble building RPMs
that result in a working NiFi installation on a clean system.  I'm not sure
if I'm just doing it wrong, or if I should create a ticket and try to fix
it.

After building an RPM (mvn clean install -Prpm) and installing it (Amazon
Linux, Java 1.7.0_91), I ran into the following error attempting to start
NiFi :

# ./nifi.sh start

Java home: /usr/lib/jvm/java
NiFi home: /opt/nifi/nifi-0.4.1

Bootstrap Config File: /opt/nifi/nifi-0.4.1/conf/bootstrap.conf

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Logger
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
        at java.lang.Class.getMethod0(Class.java:2866)
        at java.lang.Class.getMethod(Class.java:1676)
        at
sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
        at
sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 6 more

But the .tar.gz assembly file from the same build works just fine.
Comparing listings of the two file sets, it appears that the .tar.gz
assembly has complete set of jar files in lib/bootstrap:

* activation-1.1.jar
* antlr-runtime-3.5.2.jar
* commons-lang3-3.4.jar
* logback-classic-1.1.3.jar
* logback-core-1.1.3.jar
* mail-1.4.7.jar
* nifi-api-0.4.1.jar
* nifi-bootstrap-0.4.1.jar
* nifi-expression-language-0.4.1.jar
* nifi-processor-utils-0.4.1.jar
* nifi-security-utils-0.4.1.jar
* nifi-utils-0.4.1.jar
* slf4j-api-1.7.12.jar

while the RPM install's lib/bootstrap has only one of these:

* nifi-bootstrap-0.4.1.jar

So I tried to troubleshoot why this is.  It looks like the nifi-assembly
POM is set up to use the same defined set of dependencies for both the
maven-assembly-plugin and rpm-maven-plugin plugins.  The lib folder plan
for both plugins is something like:

lib - all dependencies except:
* nifi-bootstrap

lib/bootstrap - include only:
* nifi-bootstrap

The problem appears to be a difference between how the two plugins handle
transitive dependencies.  The maven-assembly-plugin has configuration
options allowing us to specify that the exclusions apply to the named
plugins AND their transitive dependencies.  The rpm-maven-plugin does not
have a transitive configuration option, and does not appear to do the same
thing by default.  In fact, the RPM is built with nifi-bootstrap-0.4.1.jar
in the lib/bootstrap folder, but all of its transitive dependencies (such
as slf4j from the error) are in the lib folder.  I believe the RPM installs
LICENSE and NOTICE in the docs folder for the same reason.

But that would suggest that NiFi RPMs are not working for anyone else?

Reply via email to