没有版本的maven依赖

问题描述 投票:36回答:2

最近我一直在研究一段时间前开发的项目的一些改进,这就是我发现的。 pom文件中的许多依赖项没有指定版本,但它们已被解析。该项目由1个根模块和2个子模块组成。使用聚合器模式,这意味着根本没有dependencyManagement部分。上层项目简单地聚合了2个模块,这就是它的全部功能。子项目不会将其称为父项。他们有不同的父母。我无法理解的是既没有子项目本身也没有它们的父项(事实上,它也没有依赖管理)为某些依赖项指定了版本。例如:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>imap</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

有人可以帮我解决这个问题吗? maven是否使用某种默认策略处理版本控制?什么是默认策略?

java maven-3 spring-io
2个回答
24
投票

好的,我想我会自己回答。当然,我看了一下依赖:tree,但我提到的所有依赖项都是树的第一级成员。我没有立即注意到的是,dependencyManagement不存在于父级中,但它存在于子模块中,它包含的内容更有趣:

        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

我之前从未使用过Spring IO平台,所以这对我来说是一个全新的概念。事实证明,该平台包含了相当多的预配置依赖项:http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions


16
投票

如果没有定义工件的版本,maven就不可能工作。它们应该在子模块或父模块中的dependencyManagement标签中的某处定义。请检查你的pom层次结构。在项目的子模块目录中使用mvn help:effective-pom。您还可以使用mvn dependency:tree来查找哪些工件 - 以及包含版本号的完整工件信息 - 在依赖关系管理的结果中得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.