【问题标题】:What will the version be when I don't specify it in the Maven's pom.xml?当我没有在 Maven 的 pom.xml 中指定它时,版本会是什么?
【发布时间】:2016-11-28 16:06:46
【问题描述】:

最近用maven写了一个项目,但是对maven pom.xml中的版本有疑问。

如果我写这样的依赖

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
     <!--No version here-->
</dependency>

版本是什么

  1. 在一个简单的项目中,没有子项目

  2. 作为另一个项目中的依赖项,并且该项目使用 foo-bar-1.0.0

【问题讨论】:

    标签: java maven version


    【解决方案1】:

    您问题的第 1 部分:如果您不指定版本,则会出现各种不同的结果:

    a) 你会得到一个错误...

    [ERROR]   The project org.example:myproject:0.5-SNAPSHOT (D:\src\myproject\pom.xml) has 1 error
    [ERROR]     'dependencies.dependency.version' for foo:bar:jar is missing. @ line 39, column 14
    

    b) 如果您已经在项目父级 pom 的依赖管理中定义了版本,则采用该版本。项目的父项目不必是封闭的超级项目。它可以只是适当定义的集合。

    c) 如果您的项目的另一个依赖项也依赖于 foo:bar,并指定了一个版本,则采用该版本。 Maven 2 有一个称为transitive dependencies 的机制。如果没有为工件明确指定依赖项的版本,它会搜索依赖项树并使用树中的最近定义。如果有两个最接近的定义,则第一个声明获胜(从 maven 2.0.9 开始)。

    第 2 部分:我不确定,但也许传递依赖机制也可以这样工作。但是文档(据我所知)没有提到这种情况。

    但不知何故,我觉得您问题的第二部分没有意义:我想为了使用工件作为依赖项,您必须先构建它。因此,在将依赖项本身用作依赖项之前,您必须了解依赖项的版本。

    【讨论】:

    • 嘿@Hok 我一直在尝试找出它何时抛出上述错误以及何时开始按照上述规则进行假设。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多