2016-07-13 4 views
0

私の会社はSBT/Scalaを使用しています。私の目標は、Maven/JavaではなくカスタムNiFiプロセッサを開発することです。私が抱えている問題は、SBTでNARファイルを生成する方法がわからないことです。 NiFiにはnifi-nar-maven-pluginパッケージプラグインがあり、すべてのプロセッサ依存関係をjar(nar)にパッケージ化します。 SBTを使ってNARを構築する方法はありますか?別のビルドシステムを使ってNiFiでカスタムプロセッサを構築することはできますか?

  • 脂肪jarファイル(例:https://github.com/sbt/sbt-assembly)を構築:私は考えられてきた

    オプション。私はNARのpomファイルを参照してくださいが、実際に何かのために使用されているか、それともメタデータですか? NarUnpacker、NarClassLoaderのようなクラスがありますので、Far jarの動作を妨げるNar形式のものがあるかどうか疑問に思っています。

  • プラグインをリバースエンジニアリングし、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によって使用されるライブラリの競合を防ぎます。したがって、1つの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が表示されます。アンバリNAR。

各NARは、他の1つのNARに依存することができます。これは、プロセッサがコントローラサービスにNARに依存する方法です。このような場合、NAR Mavenプラグインは、親NARのIDを指定する特殊なMANIFESTファイルをNARに作成し、そのIDはNiFiによって適切なクラスローディングを実行するために使用されます。

開発者ガイドは、この一部をカバー: https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#nars

NARプラグインはのNARが生成されている標準的な方法ですので、個人的に私は、Mavenを使用することをお勧めします。あなたが指摘したように、おそらくSBTと同様のプラグインを作成することは可能ですが、多くの努力のようです。 Mavenを使用すると、このプロジェクトは、Scalaでのプロセッサを開発するためのテンプレートを提供していますが、まだビルドツールとしてMavenを使用しています...あなたはスカラ座を使用することはできませんという意味ではありません:

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

関連する問題