当前位置: 首页 > 知识库问答 >
问题:

我可以使用另一个构建系统用NIFI构建自定义处理器吗?

太叔岳
2023-03-14

我的公司使用SBT/Scala,所以我的目标是用这些而不是Maven/Java开发我们自定义的NiFi处理器。我遇到的问题是我不知道如何用SBT生成NAR文件。NiFi有一个nifi-nar-maven-plugin包插件,它使用该插件将所有处理器依赖项打包到一个jar(nar)中。是否存在使用SBT构建NAR的问题?

我考虑过的选择:

  • 构建一个胖罐子(例如:https://github.com/sbt/sbt-assembly)。我在NAR中看到pom文件,但这些文件实际上用于任何东西还是只是元数据?我看到像NarUnpacker、NarClassLoader这样的类,所以我想知道在Nar格式中是否有特定的东西会阻止胖罐子工作。
  • 对插件进行反向工程,并创建一个SBT插件。可能需要做一些工作,然后我们会冒着与原始插件的更改不同步的风险。
  • 为SBT构建一个围绕maven插件的包装器。不过,我不认为这会起作用,因为该插件是基于maven库构建的。
  • 只保留NiFi子项目作为maven构建,并通过SBT父项目运行它。(例如http://www.scala-sbt.org/0.13/docs/process.html)
  • 放弃并说服管理层使用Maven。

共有1个答案

百里渊
2023-03-14

NARs用于在NIFI中提供类加载器隔离。每个NAR都是一个工件,其中包含它所需的所有JAR,并且它们只对该NAR可见。这可以防止不同的NAR使用冲突的库,所以如果一个NAR使用Guava16,另一个NAR使用Guava18,就不会产生问题。

NAR被解压缩到nifi_home/work/nar。例如,查看nifi-0.7.0/work/nar/extensions/nifi-ambari-nar-0.7.0.nar-unpacked/meta-inf/bundled-dependencies/,它将显示ambari NAR包含的所有jar。

每个NAR可以依赖于另一个NAR,这就是处理器如何依赖于控制器服务的NAR。在这些情况下,NAR Maven插件在NAR中创建一个特殊的清单文件,该文件指定父NAR的id,NiFi使用该id执行适当的类加载。

《开发人员指南》包括以下内容:https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#nars

就我个人而言,我建议使用Maven,因为NAR插件是生成NAR的标准方式。正如您所指出的,用SBT创建一个类似的插件是可能的,但似乎需要大量的努力。使用Maven并不意味着不能使用Scala...这个项目提供了一个用Scala开发处理器的模板,但仍然使用Maven作为构建工具:

https://github.com/jfrazee/nifi-processor-bundle-scala.g8

 类似资料:
  • 主要内容:本节引言:,1.我们一点点开始改:,升级1:将Entity设置成泛型,升级2:ViewHolder类的升级改造:,升级3:定义一个抽象方法,完成ViewHolder与Data数据集的绑定,升级4:修改getView()部分的内容,2.升级完毕,我们写代码来体验下:,3.代码示例下载:,本节小结:本节引言: 如题,本节给大家带来的是构建一个可复用的自定义BaseAdapter,我们每每涉及到ListView GridView等其他的Adapter控件,都需要自己另外写一个BaseAdap

  • 我正在构建一个自定义处理器来处理流文件,为了处理流文件,我需要从我的本地文件系统读取CSV文件。我创建了一个proerty描述符CSV_PATH,如下所示 现在我想在配置处理器时获取在UI中设置的CSV_PATH属性的值。我无法获得CSV_PATH值。另外,如果我在代码中硬编码filepath,那么我仍然无法从本地文件系统读取CSV。

  • 构建系统的参考,这里包含了可选参数、变量等的完整参考文档。注意:构建系统目前正处于开发版本重做状态,以下的信息可能过时。 到论坛查看更多信息。 构建系统让你可以通过外部程序运行你的文件,如整理、翻译等等。 可执行的构建系统必须处于PATH下。 文件格式 带有.sublime-build扩展名的 JSON 文件。 示例 { "cmd": ["python", "-u", "$file"],

  • 3.4.4 使用混淆 自从 Gradle plugin for ProGuard 4.10 版本以后,Gradle 开始支持混淆。如果通过 Build Type 的 minifyEnabled 属性配置了使用混淆后,The ProGuard plugin 会自动被应用,并且自动创建一些任务。 android { buildTypes { release {

  • 3.4.2 构建类型 默认情况下,Android plugin 会自动的设置工程,构建 release 和 debug 两个版本。 他们主要的差异主要在于是否可以在设备上调试应用以及APK如何签名。 debug 版本会被使用已知的名称/密码自动生成的密钥/证书签名。release 版本在构建过程中不会被签名,需要构建后再签名。 这些配置可以通过一个叫 BuildType 配置。默认情况下,已经创建