gpt4 book ai didi

java - 无法覆盖来自第三方库的 Maven 依赖项 -NiFi

转载 作者:行者123 更新时间:2023-12-01 16:47:39 26 4
gpt4 key购买 nike

我一直致力于创建自定义 NIFI 处理器。我正在尝试使用 luwak 搜索库,它使用 Lucene 6.5.0。然而,NiFi 库似乎使用 Lucene 4.10.4。我已经尝试了 pom 文件的各种操作,但在构建 nar 文件时无法让它覆盖 NiFi 4.10.4 lib。这很可能是用户错误。我只是一辈子都无法弄清楚它是什么。在我的 IDE 中运行良好,但是当我构建 Artifact (NAR) 时,我可以看到 4.10.4 库在那里,但不是 Luwak 需要的某些 6.5.0 库。任何帮助将不胜感激。

阅读一项研究后,我发现如果我专门将所需库的 Lucene 版本与 DependencyMangement 一起放入 pom 中,它就会起作用。还尝试了排除(也显示)。

编辑:尝试了@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>

最佳答案

4.x lucene 版本不是通过传递依赖项引入的,因此将它们从 nifi-api 和 nifi-mock 等内容中排除不会执行任何操作。

您获得 4.x 版本的原因是您的 NAR 包根 pom 很可能有 nifi-nar-bundles 的父级,这意味着您一直继承到 NiFi 的根 pom,这导致 NiFi 的 dependencyManagement在您的 NAR 中生效。

你有两个选择...

1) 如果这是一个自定义 bundle ,将位于 NiFi 源代码树之外,那么您可以删除 bundle 和 NiFi 之间的这种关系。此处对此进行了描述:

https://cwiki.apache.org/confluence/display/NIFI/Maven+Projects+for+Extensions#MavenProjectsforExtensions-Inheritance

最新的 NAR 插件是 1.2.0。

2) 如果您计划将其贡献给 NiFi,或者您正在维护自己的 NiFi 分支并希望您的 bundle 位于 nifi/nifi-nar-bundles 下,那么您应该能够完成这项工作通过在包的根 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 中。

关于java - 无法覆盖来自第三方库的 Maven 依赖项 -NiFi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com