我正在实现自定义NiFi处理器来解码一些文件。在解码过程中,我需要查找某些数据映射的外部CSV记录。注意,这个解码过程很复杂,所以它必须是一个自定义处理器。我知道可以设置外部CSVRecordLookupService,然后在CustomController中定义一个属性描述符,如下所示
public static final PropertyDescriptor CLIENT_LOOKUP_SERVICE =
new PropertyDescriptor.Builder()
.name("Client CSV Lookup service")
.identifiesControllerService(LookupService.class)
.required(true)
.build();
我的第一个问题是如何引用LookupService.class
,我应该使用哪个maven Jar包。经过一番调查,我发现了这个https://mvnrepository.com/artifact/org.apache.nifi/nifi-standard-services-api-nar/1.13.0。因此,我将它添加到我的processors
pom.xml
中,如下所示
<!-- https://mvnrepository.com/artifact/org.apache.nifi/nifi-standard-services-api-nar -->
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-services-api-nar</artifactId>
<version>1.13.0</version>
</dependency>
现在我可以编译我的类了,LookupService
在代码中是可见的。但是,我不能构建nar
或运行maven,因为它会导致Cannot resolve org.apache.nifi:nifi-standard-services-api-nar:1.13.0
错误。
在这个想法中,它也显示了错误。
如何解决这个问题,并在我的自定义处理器中使用org.apache.nifi.lookup.LookupService
。
我相信这可能是因为它以nar
而不是jar
的形式出现。但我的问题是,如何仅在编译时使用LookupService,如何通过解决此问题在运行时使用NiFi提供的类。
更新
我想提供这方面的最新情况,但这个问题还没有完全解决。
我在马文回购找到了一个罐子,里面有LookupService
与org.apache.nifi.serialization.record.Record一起,我可以成功地编译和运行maven。
根据maven回购依赖关系,这两者都应该使用范围provided
声明。所以我就这么做了。
现在的问题是,我不能包装纳。它不像我排除了LookupService类。即使我删除了提供的范围,它也不会被包括在内。
[INFO] Generating documentation for NiFi extensions in the NAR...
[INFO] Found a dependency on version 1.13.0 of NiFi API
[ERROR] Could not generate extensions' documentation
java.lang.NoClassDefFoundError: org/apache/nifi/lookup/LookupService
...
...
[ERROR] Failed to execute goal org.apache.nifi:nifi-nar-maven-plugin:1.3.1:nar (default-nar) on project nifi-decoder-processors-nar: Execution default-nar of goal org.apache.nifi:nifi-nar-maven-plugin:1.3.1:nar failed: A required class was missing while executing org.apache.nifi:nifi-nar-maven-plugin:1.3.1:nar: org/apache/nifi/lookup/LookupService
[ERROR] -----------------------------------------------------
[ERROR] realm = extension>org.apache.nifi:nifi-nar-maven-plugin:1.3.1
那么我们如何在自定义处理器中使用这个LookupService呢?
发布于 2021-04-05 14:30:18
为了在运行时使用它,您必须在nifi-解码器-处理器-纳尔的pom文件中添加下面的依赖项。类型为nar
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-services-api-nar</artifactId>
<version>1.13.0</version>
<type>nar</type>
</dependency>
至于在nifi-解码器-处理器的pom文件中添加下面的编译器时间(我在存储库中的NAR的pom.xml中找到了它,您可能认为NAR是依赖的集合)。
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-lookup-service-api</artifactId>
<version>1.13.0</version>
<scope>provided</scope>
</dependency>
https://stackoverflow.com/questions/66951167
复制相似问题