我的公司使用SBT / Scala,因此我的目标是使用这些而不是Maven / Java开发我们的定制NiFi处理器。我遇到的问题是我不知道如何使用SBT生成NAR文件。 NiFi有一个nifi-nar-maven-plugin包插件,用于将所有处理器依赖包装到jar(nar)中。无论如何使用SBT构建NAR?
我考虑的选项:
答案 0 :(得分:3)
NAR用于在NiFi中提供类加载器隔离。每个NAR都是一个包含它所需的所有JAR的工件,它们只对该NAR可见。这可以防止不同NAR使用的冲突库,因此如果一个NAR使用Guava 16而另一个NAR使用Guava 18,则不会导致问题。
NARs解压到nifi_home / work / nar。例如,查看nifi-0.7.0 / work / nar / extensions / nifi-ambari-nar-0.7.0.nar-unpacked / META-INF / bundled-dependencies /它会显示所有包含的JARS ambari NAR。
每个NAR都可以依赖于另一个NAR,这就是处理器对控制器服务具有NAR依赖性的方式。在这些情况下,NAR Maven插件在NAR中创建一个特殊的MANIFEST文件,用于指定父NAR的id,并且该ID由NiFi用于执行适当的类加载。
开发者指南涵盖了以下内容: https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#nars
我个人建议使用Maven,因为NAR插件是生成NAR的标准方式。正如你所指出的,可能用SBT创建一个类似的插件,但似乎需要付出很多努力。使用Maven并不意味着你不能使用Scala ...这个项目提供了一个用于在Scala中开发处理器的模板,但仍然使用Maven作为构建工具: