Maven-使用jar作为依赖项时获得不同版本->;令人困惑

Maven-使用jar作为依赖项时获得不同版本->;令人困惑,maven,spring-boot,Maven,Spring Boot,作为我项目的一部分,我构建了一个SpringBootStarter 当我检查starter中使用的依赖项时,我没有发现任何冲突。Pom.xml是可用的。例如,在我的starter 1.1.0中,我确实获得了jackson数据绑定2.9.8 现在,当我在另一个项目中使用starter时,其中唯一声明的依赖项在starter之上: <dependencies> <dependency> <groupId>com.societegen

作为我项目的一部分,我构建了一个SpringBootStarter

当我检查starter中使用的依赖项时,我没有发现任何冲突。Pom.xml是可用的。例如,在我的starter 1.1.0中,我确实获得了
jackson数据绑定
2.9.8

现在,当我在另一个项目中使用starter时,其中唯一声明的依赖项在starter之上:

<dependencies>
       <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-starter</artifactId>
        <version>1.1.0</version>
    </dependency>
</dependencies>

com.societegenerale.ci-droid.tasks-consumer
)

我希望看到完全相同的依赖关系。。我不知道在这种情况下,jackson databind 2.8.9“获胜”,而不是2.9.8

这会导致运行时出现问题。这很烦人,因为如果我不能保证在使用starter时会出现哪些依赖项,我就无法真正轻松地分发它

哪条Maven规则在这里起作用?我不明白。。我怎样才能确保我发布的初学者中有正确的版本,这样我就不需要告诉人们在使用它时明确声明版本了?

在您的POM或父POM中可能会出现
。这会将版本设置为2.9.8


在另一种情况下,Maven遵循“neareast dependency wins”策略,这会导致意外行为。

好吧,我不知道这是否是推荐的方法,但这是有效的。在使用starter的自定义项目中,将父pom用作BOM表,将starter用作依赖项,每次提及版本:


UTF-8
UTF-8
1.8
1.1.0
com.societegenerale.ci-droid.tasks-consumer
ci droid任务使用者父项
聚甲醛
进口
${ci droid任务使用者.version}
com.societegenerale.ci-droid.tasks-consumer
ci droid任务消费者启动器
${ci droid任务使用者.version}

如果我像那样导入它,那么
jackson-databinder
就像主项目一样,即2.9.8。

确实有:这很好。我的问题更像是“为什么在使用构建的jar时不保留它?”当只有一个依赖项时,“最近的依赖项获胜”策略如何应用?我在“child”自定义项目中没有DependencyManager,只有1个dependency:我相信DependencyManager在dependencies中被忽略,但我没有这方面的来源(我搜索了它,但没有成功)。因此,如果我的评论是正确的,如果将项目用作依赖项,则可能会得到与生成中不同的依赖项。是的,我的观点正是;-)那么,避免这种情况的推荐方法是什么?因为我无法在每次修改pom.xml时手动测试。今天是jackson数据绑定,明天是其他内容。这就是Spring处理数百个依赖项()的方式,它们有大量的启动项,人们将它们用作依赖项。当然,他们有办法确保其代码无论是直接使用还是作为依赖项使用,其行为都是相同的。我会说:如果某个东西是库,即意味着是依赖项,那么就避免依赖项管理。根据您构建的实际应用程序的级别进行依赖性管理,例如使用BOM表。
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <ci-droid-tasks-consumer.version>1.1.0</ci-droid-tasks-consumer.version>
</properties>

<dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-parent</artifactId>
        <type>pom</type>
        <scope>import</scope>
        <version>${ci-droid-tasks-consumer.version}</version>
    </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <dependency>
        <groupId>com.societegenerale.ci-droid.tasks-consumer</groupId>
        <artifactId>ci-droid-tasks-consumer-starter</artifactId>
        <version>${ci-droid-tasks-consumer.version}</version>
    </dependency>

</dependencies>