2016-07-13 30 views
0

我的公司使用SBT/Scala,所以我的目標是用這些開發我們自定義的NiFi處理器而不是Maven/Java。我遇到的問題是我不知道如何使用SBT生成NAR文件。 NiFi有一個nifi-nar-maven-plugin包插件,用於將所有處理器依賴關係打包成jar(nar)。無論如何要用SBT構建NAR?我可以使用另一個構建系統來構建帶有NiFi的定製處理器嗎?

選項,我認爲:

  • 建設脂肪罐子(例如:https://github.com/sbt/sbt-assembly)。我在NAR中看到了pom文件,但它們實際上是用於任何事情還是僅僅是元數據?我看到像NarUnpacker,NarClassLoader這樣的類,所以我想知道在Nar格式中是否有特定的東西會阻止Fat jars工作。
  • 逆向工程插件並創建一個SBT。可能是一點工作,然後我們可能會冒險與原始插件的更改不同步。
  • 圍繞SBT的maven插件構建一個包裝。我認爲這不會起作用,因爲這個插件是由maven庫構建的。
  • 只留下NiFi子項目作爲maven構建,並通過SBT父項目運行。 (例如http://www.scala-sbt.org/0.13/docs/Process.html
  • 放棄並說服管理層使用maven。

回答

3

NAR用於在NiFi中提供類加載器隔離。每個NAR都是一個工件,它包含它所需的所有JAR,而且它們只對該NAR可見。這樣可以防止不同NAR使用的庫衝突,因此如果一個NAR使用Guava 16而另一個NAR使用Guava 18,則不會導致問題。

將NAR解包到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插件是NARS生產的標準方式。正如你指出的那樣,可能可以用SBT創建一個類似的插件,但看起來很費力。使用Maven並不意味着你不能使用Scala的...這個項目提供了一個模板,用於開發處理器在斯卡拉,但仍然使用Maven作爲構建工具:

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

相關問題