当前位置: 首页 > 面试题库 >

为什么有时会跳过Maven依赖项中的版本号?

秦信瑞
2023-03-14
问题内容

我对maven的功能还很陌生。.我已经看到在放置依赖项的pom.xml中,有时仅提及groupID和工件ID,而跳过版本。为什么是这样?例如,以下依赖项来自springsource网站http://spring.io/guides/gs/authenticating-
ldap/

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
        <version>3.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>apacheds-server-jndi</artifactId>
        <version>1.5.5</version>
    </dependency>
</dependencies>

但是在stackoverflow的其他地方,也提到版本不是可选的。如果有人可以解释我会很高兴。


问题答案:

是的,版本不是可选的。

考虑一个具有10个模块的多模块应用程序,例如module1,module2..module10。假定所有这10个项目都使用spring-boot- starter-web。如果这10个模块是相互依赖的,则您可能要在这10个模块spring-boot-starter- web中的每一个中使用相同的版本。

现在,试想一下,如果要在所有这10个pom文件中都维护相同的版本号,然后在要使用更高版本的时更新它们,那么将多么复杂spring-boot- starter-web。如果可以集中管理此信息,会更好吗?

Maven有一个已知的<dependencyManagement/>标签可以解决这个问题并集中化依赖项信息。

对于您提供的示例,下面的链接集将帮助您了解如何解析版本号,即使您查看的pom中不存在该版本号也是如此。

查看您正在查看的pom的父标签(https://github.com/spring-guides/gs-authenticating-
ldap/blob/master/complete/pom.xml

现在让我们转到该父对象,看看是否在该pom的dependencyManagement部分中指定了版本(https://github.com/spring-
projects/spring-boot/blob/master/spring-boot-starters/spring-boot -starter-
parent / pom.xml
)。不,它也没有定义。现在,让我们看一下parent的父级。https://github.com/spring-
projects/spring-boot/blob/master/spring-boot-
dependencies/pom.xml。哦,是的,我们那里有版本号。

与dependencyManagement类似,可以在pom的pluginManagement部分中管理插件。

希望能解释一下。

请参阅:dependencyManagement,pluginManagement



 类似资料:
  • 问题内容: 最近,我一直在研究前一段时间开发的项目中的一些改进,这就是我所发现的。pom文件中的许多依赖项都没有指定版本,但是已经解决了。该项目包含1个根模块和2个子模块。使用了Aggregator模式,这意味着根本没有dependencyManagement部分。上层项目仅聚合了2个模块,仅此而已。子项目并不将其称为父项。他们有不同的父母。我无法理解的是,子项目本身或它们的父项(事实上,它也没有

  • 我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相

  • MVNRepository通常为每个依赖项列出“版本”和“更新”。 如果我发布自己的包,如何指定“更新”版本 Maven在解决传递依赖时使用了哪个依赖项?所以如果我的包依赖于包A,它依赖于包B,版本=1.0,更新=1.1。我会得到哪个版本的B?

  • 当我有一个包含POM的项目时,例如: 但是我似乎弄错了,Internet上的Maven文档并没有帮助我解决这个问题。 有什么想法吗?

  • 我想知道为什么我的简单spring boot项目不再有效。它基本上直接来自spring示例,其中一个控制器说hello world。我使用的是spring boot starter jetty和spring boot v1.1.10(也尝试了1.2.0)。我有一些使用嵌入式solr的单元测试,所以solr核心被标记为<代码> 我认为测试范围的依赖关系不应该干扰编译范围的依赖关系,并且“仅适用于测试