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

Spring boot starter依赖项覆盖qpid jms客户端的netty版本

方建明
2023-03-14

我正在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)。我知道spring boot版本很旧,应该更新。无论如何,似乎spring boot starter的母公司强制执行其netty版本。

pom。xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>untitled1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.qpid/qpid-jms-client -->
        <dependency>
            <groupId>org.apache.qpid</groupId>
            <artifactId>qpid-jms-client</artifactId>
            <version>0.59.0</version>
        </dependency>
    </dependencies>
</project>

由于我没有使用任何Spring Boot依赖项,我不明白为什么netty版本设置为4.1.65。最终

[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ untitled1 ---
[INFO] org.example:untitled1:jar:1.0-SNAPSHOT
[INFO] \- org.apache.qpid:qpid-jms-client:jar:0.59.0:compile
[INFO]    +- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO]    +- org.apache.geronimo.specs:geronimo-jms_2.0_spec:jar:1.0-alpha-2:compile
[INFO]    +- org.apache.qpid:proton-j:jar:0.33.8:compile
[INFO]    +- io.netty:netty-buffer:jar:4.1.65.Final:compile
[INFO]    +- io.netty:netty-common:jar:4.1.65.Final:compile
[INFO]    +- io.netty:netty-handler:jar:4.1.65.Final:compile
[INFO]    |  +- io.netty:netty-resolver:jar:4.1.65.Final:compile
[INFO]    |  \- io.netty:netty-codec:jar:4.1.65.Final:compile
[INFO]    +- io.netty:netty-transport:jar:4.1.65.Final:compile
[INFO]    +- io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.65.Final:compile
[INFO]    |  \- io.netty:netty-transport-native-unix-common:jar:4.1.65.Final:compile
[INFO]    +- io.netty:netty-transport-native-kqueue:jar:osx-x86_64:4.1.65.Final:compile
[INFO]    \- io.netty:netty-codec-http:jar:4.1.65.Final:compile

QPID-JMS-CLIENT的pom通过属性netty version定义netty版本,而spring boot使用netty。版本。如果我覆盖spring boot的属性,QPID的版本将更改:

...
<properties>
    <netty.version>4.1.68.Final</netty.version>
</properties> 
...

如果覆盖QPID的版本,则根本没有效果:

...
<properties>
    <netty-version>4.1.68.Final</netty-version>
</properties> 
...

所以我的问题是:

  • 为什么maven强制执行父poms netty版本,而依赖项附带明确的不同版本?(即使我降低了spring boots版本,netty依赖项也设置为该版本)

问候

[1]https://mvnrepository.com/artifact/org.apache.qpid/qpid-jms-client/0.59.0

[2] https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent/2.3.12.RELEASE

[3]https://html" target="_blank">github.com/apache/qpid-jms/blob/main/pom.xml#L40

共有1个答案

欧阳子石
2023-03-14

您的pom将从您在其父层次结构中使用的spring pom继承一个dependencyManagement部分。这个祖先包括管理netty版本的Spring Boot依赖项(您似乎已经意识到,使用netty.version属性导入netty bom)。

因此,有效pom中的dependencyManagement(可通过mvn帮助查看:有效pom)将控制所选netty的版本。客户端pom指定的netty版本与应用程序使用的内容无关,因为该版本实际上是由您的构建覆盖和管理的。这是dependencyManagement配置的关键用途之一。

如果您想在本地覆盖netty的版本,同时拥有父继承权,您可以使用与父继承的依赖项Mangement相关的netty.version属性,正如您已经注意到的,或者您可以在pom中为netty定义自己的本地依赖项Mangement,它覆盖了它的继承父管理。

 类似资料:
  • 问题内容: 我想使用NPM软件包。它具有各种依赖性。依赖图的一部分如下所示: 不幸的是,此版本中存在一个错误,导致该错误无法在Mac OS X上正确安装。此问题已在最新版本中修复。 如何获得更新版本的? 一些其他上下文: 明确要求版本为,明确要求版本为。 首先添加到我程序包的依赖项没有任何作用;这两个版本均已安装,并且仍使用旧版本 问题答案: 您可以使用npm收缩包装功能,以覆盖任何依赖性或子依赖

  • 如果我有一个maven项目,它对A和B版本2.0有显式依赖,而A对B版本1.0有传递依赖。较新版本的B会覆盖较旧版本吗?我使用了maven Depencdy:解析目标,看起来旧版本的B没有解析。如果A与较新版本的B不兼容怎么办?或者如果A依赖于B版本2.0,而我的项目在运行依赖关系后对B版本1.0有显式依赖:解析目标,那么我看不到B的较新版本。那么如何解决这些依赖关系呢? 当我使用resolve

  • 问题内容: 在其中,您可以选择覆盖依赖项,并使其指向其他存储库,例如在以下https://github.com/kubermatic/glog- logrus 库中,您需要在Gopkg.toml文件中添加以下几行: 然后在代码库中。但是,在go模块中,我看不到这样的选择吗?这使我认为唯一的解决方案是将import更改为。 谢谢! 问题答案: 这就是指令的目的。 引用Wiki Go 1.11模块:我

  • 我正在构建一个用于从云存储获取加密机密的库(在Scala中,使用Java客户端)。我正在使用以下google库: 一切都在本地正常工作,但是当我试图在Dataproc中运行我的代码时,我得到了以下错误: 我的代码中有问题的行是: 我在文档中看到,一些google库在Dataproc上可用(我使用的是图像版本为1.2.15的Spark集群)。但就我所见,GoogleAPI客户端的可传递依赖项与我在本