当前位置: 首页 > 知识库问答 >
问题:

Netty依赖带来旧版本

东门仲卿
2023-03-14

共有2个答案

昝唯
2023-03-14
<dependency>
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <exclusions>
       <exclusion>
         <groupId>io.netty</groupId>
         <artifactId>netty-codec-http2</artifactId>
       </exclusion>
    </exclusions>
</dependency>

你需要排除标签

闻人越
2023-03-14

Maven在选择依赖项的版本时不会比较版本号。当执行广度优先搜索时,它简单地选择它遇到的第一个版本。因此,gRPC团队强烈建议使用Maven enforcers < code > requireUpperBoundDeps 来检测您所面临的问题:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version>
        <executions>
          <execution>
            <id>enforce</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireUpperBoundDeps/>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>

然后,要解决问题,有两种方法

  1. 重新排序依赖列表或重新定义传递依赖
  2. 使用BOM

(1) 目标是Maven的广度优先搜索,以获得您希望在Maven搜索中首先“看到”的版本。例如,您可以在<code>中的<code>grpc netty</code>之前重新排序<code>netty处理程序</code>

(2) 适用于多工件项目,如gRPC和Netty,您确实希望各种工件的版本一致。您通常不希望将netty buffer4.1.51.Final与netty-codec-http24.1.27.Final一起使用;你希望它们是相同的版本。在这些情况下,可以检查项目是否具有BOM表。gRPC和Netty都有BOM表。使用BOM表,您可以为该项目中的所有不同工件选择一次使用的版本。BOM在<code>中定义

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-bom</artifactId>
        <version>4.1.51.Final</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    ...

无论你做什么,都不要排斥。排除之后会导致依赖关系问题,因为它们隐藏了可传递的依赖关系。如果更新版本的gRPC依赖于更新版本的Netty,那么最终会降级Netty。此时,构建工具不再能够检测或管理问题;您只能在运行时发现此类问题。

从你所展示的很明显,在你的pom.xml中发生了更多的事情;你真的需要分享更多的pom来诊断。但是由于其他答案告诉你要排除,我想展示更合适的解决方法。

 类似资料:
  • 这将打印: 在同一个文件夹中有一个poi-3.8.jar,但类路径取3.2。 我的问题是:我应该做什么,以便我的项目使用POI-3.8.jar而不是POI-3.2.jar。 非常感谢!! 编辑:的输出

  • 我写了一个库,它依赖于Guava版本20.0(与JDK 1.7兼容的最后一个版本) 然后,我编写了一个使用该库的应用程序,还uk.org.lidalia: slf4j-test: 1.2.0(带有测试范围)。slf4j-test依赖于Guava的14.0.1版本。 我的问题是,我的应用程序将两个不同版本的Guava视为可传递依赖项,并选择较旧的版本。现在,当我调用库中的某些方法时,我会得到类或方法

  • 这里有几个关于Stackoverflow的问题,关于Kotlin编译器警告,当不同版本的Kotlin JAR在类路径中混合时。 这个问题是一个不同的问题,涉及到使用静态编程语言开发Gradle插件时的情况。当您至少有以下一项: 插件应用 plugin被应用 添加了依赖项 添加了依赖项 你有静态编程语言插件,如,例如: 你会出名的: 静态编程语言1.3.72是Gradle 6.7的嵌入式版本,静态编

  • Semantic Versioning Packages in Yarn follow Semantic Versioning, also known as “semver”. When you install a new package from the registry it will be added to your package.json with a semver version ra

  • Package dependencies are critical to the success of a package. When you develop the functionality of your package, you will very likely use existing code defined in other packages. Those packages then

  • 我正在spring boot项目中使用QPID JMS客户端(版本0.59.0)。我想覆盖netty版本,因为QPID的这个版本附带netty版本:4.1.63。最终[1]。我想将netty版本改写为最新版本:4.1.68。最终的我还在我的POM中使用spring boot starter父版本(版本:2.3.12.RELEASE)作为父POM,它还附带一个netty版本(4.1.65.Final