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

Maven-为什么我不能覆盖dependencyManagement导入pom的版本?

柳德义
2023-03-14

我正在寻找关于这个案例的解释:我有一个项目,它有一个dependencyManagement/dependencies部分,其中包含:

myproject/pom。xml:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>Brixton.M3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

spring cloud starter父pom定义:

<properties>
        <main.basedir>${basedir}/../..</main.basedir>
        <spring-cloud-netflix.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-netflix.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                <version>${spring-cloud-netflix.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

这样,我的项目将获得SpringCloudStarterEureka版本1.1.0。构建快照。

我期望,如果我在myproject/pom.xml一个属性部分添加另一个版本,我会覆盖默认版本,但是它被忽略,为什么?

myproject/pom。xml

...
<properties>
        <spring-cloud-netflix.version>1.0.0</spring-cloud-netflix.version>
</properties>
...

共有1个答案

燕凯旋
2023-03-14

属性是spring cloud netflix。在构建组织时已解析版本。springframework。cloud:springcloudstartereureka工件,所以在声明依赖项时不能只覆盖它。

要正确指定某个依赖项版本,必须在pom的依赖项管理部分添加该依赖项的版本:

...
<properties>
        <spring-cloud-netflix.version>1.0.0</spring-cloud-netflix.version>
</properties>
...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>Brixton.M3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                <version>${spring-cloud-netflix.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

作为多模块构建的最佳实践,您通常会有一个共享主pom,其中包含依赖项管理设置,包括所有依赖项的所有版本信息。

 类似资料:
  • 我试图导入PyAudio,但它总是给我一个错误。如果我的电脑有问题,我使用的是Windows64x和Python3.9.4。以下是错误:

  • 我有多个spring项目,它们都具有相同的自定义父POM,它们都继承了它们的spring-boot版本(1.5.18.release)。只有一个子项目需要更新到版本2.1.4.release,但是当我导入spring-boot-dependencies时,子项目中的spring-boot dependencies仍然保持在版本1.5.18.release。 自定义父POM:

  • 问题内容: 我试图弄清楚为什么我无法覆盖通过隔离范围()传递给angularJS指令的值。我尝试使用以下方法覆盖的值: 但是,由于某些原因,它不起作用。 如果我将其更改为: 有用。另外,在作品上分配价值。 为什么第一种方法不起作用? 我已经创建了这个示例插件。 问题答案: 如您在此处使用的那样,需要通过插值指令从属性获取值。似乎指令首先被加载,然后值被求值。因此,在当前摘要周期中不会发生更改。如果

  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 我有一个具有2种口味的android应用程序:-味道1-味道2 我的目录树是: main有默认的源集。味道1和味道2目录有自己的源集,它会自动获取。如果我将资源文件添加到味道目录中,它会从main覆盖它,并且工作正常。 但是,如果我在snorty2中添加一个java类以覆盖“main”中的另一个类(例如,一个需要在slavor2中不同的活动),它不会替换它,并且它说我的项目中有一个重复的类。我只能

  • 我有这样配置的父pom: 我的孩子波姆: 我想在我的类路径中使用4.3.5版本,因为目前我收到错误消息,不应修改父版本: 任何想法如何防止覆盖4.2.9版本?