在与Nifi一起工作了几个月之后,发现一个没有意义的依赖模式,希望我能清楚地描述它,以防有人曝光。
我们一直在为几个相关但截然不同的自定义处理器制作原型,这些处理器都使用一些通用的jar库。
例如
处理器A和B使用Library1
ProcessorA与Library1中的一些代码一起开发,先构建Library1,然后再构建ProcessorA以在NiFi服务器上进行测试,一切都很好
ProcessorB也使用Library1中的一些代码进行开发,并且在将ProcessorB构建为可部署的nar之前重建了Library1。
然后,当在NiFi服务器上测试ProcessorB时(包括附加到要逐步执行的过程),我们发现需要更新Library1中的相关代码
但是,尽管对库进行了更新,但是ProcessorB仍执行旧的库代码。一个具体的例子是for循环;在将代码更改为int i = 0后,它仍然会初始化int i = 1。
仅当我对所有处理器(A和B)进行清理/重建后,ProcessorB才开始识别更新的库代码。
这是令人惊讶的,因为每个处理器nar软件包都应该有其自己的库jar副本,但是它的作用就像最早的版本一样。
最后,我的问题是:在nar包之间使用共享代码库时,这是预期的行为吗?还是有更好的做法来构造这些软件包?还是我从Java / Maven领域中缺少了一些智慧?
NiFi是1.8版,但在1.5版中也经历过
许多TIA