2016-07-13 6 views
0

Моя компания использует SBT/Scala, поэтому моя цель - разработать наши пользовательские NiFi-процессоры с этими, а не Maven/Java. Проблема, с которой я сталкиваюсь, - это я не знаю, как сгенерировать файлы NAR с помощью SBT. В NiFi есть плагин для модулей nifi-nar-maven-plugin, который он использует для упаковки всех зависимостей процессора в банку (nar). Есть ли способ построить NAR с помощью SBT?Могу ли я использовать другую систему сборки для создания пользовательских процессоров с NiFi?

Опции Я рассмотрел:

  • Построение жира банку (например: https://github.com/sbt/sbt-assembly). Я вижу pom-файлы в NAR, но они фактически используются для чего-либо или это просто метаданные? Я вижу такие классы, как NarUnpacker, NarClassLoader, поэтому мне интересно, есть ли что-то конкретное в формате Nar, которое предотвратит работу плотных банок.
  • Обратное проектирование плагина и создание SBT. Может быть, немного работы, и тогда мы рискуем выйти из синхронизации с изменениями в исходный плагин.
  • Создайте обертку вокруг плагина maven для SBT. Я не думаю, что это сработает, поскольку плагин построен из библиотек 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, это не вызовет проблемы.

NARs распаковываются в nifi_home/work/nar. Например, глядя на nifi-0.7.0/work/nar/extensions/nifi-ambari-nar-0.7.0.nar-unpacked/META-INF/вложенные зависимости/он отобразит все JARS, которые были включены для ambari NAR.

Каждый NAR может иметь зависимость от другого NAR, так как процессоры могут иметь зависимость NAR от услуг контроллера. В этих случаях плагин NAR Maven создает специальный файл MANIFEST в NAR, который указывает идентификатор родительского NAR, а этот id используется NiFi для выполнения соответствующей загрузки класса.

Руководство разработчика охватывает некоторые из: https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#nars

Лично я бы рекомендовал использовать Maven, так как плагин НАР является стандартным способом NARS производятся. Как вы указали, возможно, возможно создать аналогичный плагин с SBT, но, похоже, он прилагает много усилий. Использование Maven не означает, что вы не можете использовать Scala ... Этот проект предлагает шаблон для разработки процессоров в Scala, но до сих пор использует Maven как инструмент для сборки:

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