Java 为什么maven依赖项中的版本号有时会被跳过?
我对maven的能力还比较陌生。。 我在pom.xml中看到,在放置依赖项的地方,有时只提到groupID和工件id,而跳过版本。为什么会这样? 例如,下面的依赖项来自springsource网站Java 为什么maven依赖项中的版本号有时会被跳过?,java,maven,dependencies,pom.xml,Java,Maven,Dependencies,Pom.xml,我对maven的能力还比较陌生。。 我在pom.xml中看到,在放置依赖项的地方,有时只提到groupID和工件id,而跳过版本。为什么会这样? 例如,下面的依赖项来自springsource网站 org.springframework.boot SpringBootStarterWeb org.springframework.boot 弹簧启动安全 org.springframework.security spring安全ldap 3.2.4.1发布 org.apache.directory
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动安全
org.springframework.security
spring安全ldap
3.2.4.1发布
org.apache.directory.server
apacheds服务器jndi
1.5.5
但在stackoverflow的其他地方也提到了版本不是可选的。如果有人能解释一下,我会很高兴。是的,版本不是可选的 考虑一个多模块应用程序,它有10个模块,比如模块1、模块2。。模块10。假设这10个项目都使用
spring boot starter web
。如果这10个模块相互依赖,您可能希望在这10个模块中的每个模块中使用相同版本的spring boot starter web
现在想象一下,如果您要在所有这10个pom文件中保持相同的版本号,然后在您想要使用较新版本的spring boot starter web
时更新所有文件,这将是多么复杂。如果可以集中管理这些信息不是更好吗
Maven已经有了一个已知的
标记来解决这个问题并集中依赖信息
对于您提供的示例,下面的一组链接将帮助您了解如何解析版本号,即使您正在查看的pom中没有版本号
查看您正在查看的pom的父标记()
现在让我们转到该父级,看看是否在该pom()的dependencyManagement部分中指定了版本。不,这里也没有定义。现在让我们看一下家长的家长。哦,是的,我们有版本号
与dependencyManagement类似,插件可以在pom的pluginManagement部分进行管理
希望这能解释这一点
请参阅:,
coderplus对优秀答案的几点补充:
在多模块项目中,在根pom.xml
的dependencyManagement
中配置项目使用的工件被认为是一种良好的做法,这样您就不必在子模块pom.xml
中编写版本(就像您示例中的某些依赖项)
声明用作属性的外部库的版本,然后在dependencyManagement/dependencies/dependency/version
中使用这些属性,这也是一种良好的做法。这或多或少是这样做的:
而不是
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>1.2.0.BUILD-SNAPSHOT</version>
</dependency>
org.springframework.boot
整个目的是,不要重复你自己。POM中的冗余声明越多,它们就越难命中。寻找过时的依赖项非常有趣
<properties>
<logback.version>1.1.2</logback.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>1.2.0.BUILD-SNAPSHOT</version>
</dependency>