maven - Nifi工件可见性/依赖管理
问题描述
我有两个依赖管理问题。
让我们看这个例子:
- 我有自定义缓存控制器服务 - CustomCacheService
- groupId - com.example.service
- artifactId - 自定义缓存服务
- 查询自定义缓存的自定义处理器 - QueryCustomCache
- groupId - com.example.processor
- artifactId - 查询自定义缓存
- 加载自定义缓存的自定义处理器 - LoadCustomCache
- groupId - com.example.processor
- artifactId - 加载自定义缓存
重要说明是我想为两个处理器使用相同的 CustomCacheService 实例。
第一个问题是处理器的 GUI 列表中标准工件的重复: 由于两个处理器都必须将依赖项导入到 CustomCacheService,因此它们都需要在 -nar pom.xml 中使用此依赖项
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-services-api-nar</artifactId>
<type>nar</type>
</dependency>
如果没有此依赖项构建将失败并出现错误:无法创建扩展文档添加此依赖项后,将为两个处理器创建标准 nifi 工件的副本。重复工件的捆绑 ID 是处理器 groupId - 工件(com.example.processor - querycustomcache/ loadcustomcache)和版本是我的项目版本(例如:1.0.0-SNAPSHOT) Nifi 在其代码中导入了此依赖项,显然不会导致重复的工件。
第二个也是更重要的问题是我无法在处理器之间共享 CustomCacheService。 一旦我将服务依赖项导入两个处理器并将其加载到 nifi 中,在服务列表中,我将为此服务提供三个捆绑选项:
- CustomCacheService:com.example.processor.querycustomcache - 1.0.0-SNAPSHOT
- CustomCacheService:com.example.processor.loadcustomcache - 1.0.0-SNAPSHOT
- CustomCacheService:com.example.service.customcacheservice - 1.0.0-SNAPSHOT
每个处理器都希望从它自己的包中获得一个服务实例。QueryCustomCache 处理器需要来自 com.example.processor.querycustomcache 的服务实例,并且看不到任何其他实例。LoadCustomCache 处理器也是如此。这使我无法为两个处理器使用相同的 CustomCacheService 实例。我希望能够创建带有捆绑 ID com.example.service.customcacheservice 的 CustomCacheService 实例并在两个处理器中使用它。
这两个问题密切相关。我的依赖项的组织方式与 nifi 源代码中的相同。
解决方案
很好地解释你的情况:
https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.0.1/bk_developer-guide/content/nars.html
注意Nar-Dependency-Id
manifest.mf 中的元素
简而言之:在您的处理器中,您必须导入服务的接口而不是实现