我一直致力于创建自定义NIFI处理器。我正在尝试使用Luwak搜索库,它使用Lucene 6.5.0。但是,NiFi库,似乎使用Lucene 4.10.4。我用pom文件尝试了各种各样的东西,但是当我构建nar文件时,它无法覆盖NiFi 4.10.4 lib。这很可能是用户错误。我不能为我的生活弄清楚它是什么。在我的IDE中运行正常,但是当我构建工件(NAR)时,我可以看到4.10.4库是存在的,但不是Luwak需要的6.5.0。任何帮助将不胜感激。
阅读一项研究表明,如果我特意将Lucene版本放在我需要的库中,并使用DependencyMangement它可以工作。还尝试了排除(也显示)。
已编辑:尝试了@Rob建议并删除了pom 进口。但是,仍然有同样的问题。更新了Pom示例
Maven依赖树:
[INFO] gov.pnnl.nifi:nifi-streamqry-nar:nar:1.3
[INFO] \- gov.pnnl.nifi:nifi-streamqry-processors:jar:1.3:compile
[INFO] \- com.github.flaxsearch:luwak:jar:1.5.0:compile
[INFO] +- org.apache.lucene:lucene-core:jar:4.10.4:compile (version managed from 6.5.0)
[INFO] +- org.apache.lucene:lucene-memory:jar:6.5.0:compile
[INFO] | \- (org.apache.lucene:lucene-core:jar:4.10.4:compile - version managed from 6.5.0; omitted for duplicate)
[INFO] +- org.apache.lucene:lucene-analyzers-common:jar:4.10.4:compile (version managed from 6.5.0)
[INFO] | \- (org.apache.lucene:lucene-core:jar:4.10.4:compile - version managed from 6.5.0; omitted for duplicate)
[INFO] +- org.apache.lucene:lucene-queries:jar:6.5.0:compile
[INFO] | \- (org.apache.lucene:lucene-core:jar:4.10.4:compile - version managed from 6.5.0; omitted for duplicate)
[INFO] \- org.apache.lucene:lucene-queryparser:jar:4.10.4:compile (version managed from 6.5.0)
[INFO] \- (org.apache.lucene:lucene-core:jar:4.10.4:compile - version managed from 6.5.0; omitted for duplicate)
POM文件
<properties>
<lucene.group>org.apache.lucene</lucene.group>
<lucene.version>6.5.0</lucene.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-memory</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-queries -->
<dependency>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queries</artifactId>
<version>${lucene.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-utils</artifactId>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-mock</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-sandbox</artifactId>
</exclusion>
</exclusions>
</dependency>
排除:
<dependencies>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-utils</artifactId>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-mock</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-core</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-queryparser</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</exclusion>
<exclusion>
<groupId>${lucene.group}</groupId>
<artifactId>lucene-sandbox</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
答案 0 :(得分:3)
4.x lucene版本不会通过传递依赖进入,所以将它们排除在像nifi-api和nifi-mock这样的东西之外也不会做任何事情。
你获得4.x版本的原因是因为你的NAR捆绑根pom很可能有一个nifi-nar-bundle的父亲,这意味着你一直继承到NiFi的根pom,这导致了NiFi的依赖管理在您的NAR中生效。
你有两个选择......
1)如果这是一个将在NiFi源树之外生活的自定义捆绑包,那么您可以删除捆绑包和NiFi之间的这种关系。这在这里描述:
最新的NAR插件是1.2.0。
2)如果你打算将这个贡献给NiFi,或者如果你正在维护自己的NiFi分支并希望你的捆绑在nifi / nifi-nar-bundle下生活,那么你应该能够做到这一点通过在捆绑包的根pom中声明自己的dependencyManagement部分,并声明与顶级NiFi pom相同的lucene依赖关系,并将其版本设置为6.5.0。
在NiFi中已经有类似情况的一些例子..
例如,NiFi的顶级pom声明了特定版本的http-client,Solr处理器需要不同的版本,因此在此处重新声明:
https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-solr-bundle/pom.xml#L43-L45
第二个选项的重要部分是您的dependencyManagement部分必须位于处理器和NAR上方的bundle的pom中。
答案 1 :(得分:2)
您的问题是由
引起的amzn-main | 2.1 kB 00:00
amzn-updates | 2.5 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package php-pdo.x86_64 0:5.3.29-1.8.amzn1 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.29-1.8.amzn1 for package: php-pdo-5.3.29-1.8.amzn1.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.3.29-1.8.amzn1 will be installed
--> Processing Conflict: php70-common-7.0.21-1.24.amzn1.x86_64 conflicts php-common < 5.5.22-1.98
导入(仅在Maven 2.0.9或更高版本中可用)此范围仅适用 支持pom类型的依赖关系 部分。它表示要用有效替换的依赖关系 指定POM中的依赖项列表 部分。由于它们被替换,因此具有导入范围的依赖项 实际上并没有参与限制a的传递性 依赖性。
你几乎肯定想要使用jar工件。如果你只是删除和标签,它可能会按你的意愿工作。
通过明确提及具有特定版本的组/工件,maven将优先于那些通过传递依赖项包含的版本。只要组/工件名称没有改变,那么这种方法效果很好。
但是,如果组/工件名称已更改,则需要在标记中排除引入过时工件的依赖关系。