初试了下springboot,发现dependency都无需指定jar包版本。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
不知它的版本策略如何,想到3种,不知是哪一种?
以mysql为例:
1. 永远下载最新版本
2. 根据springboot版本,找到对应的mysql版本,固定不变
3. 找到适配本springboot的最新的mysql版本
spring boot 在定义pom的时候,会引入一个parent:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.4.RELEASE</version> </parent>
而这个spring boot starter parent 又指定了:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.4.4.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
spring-boot-dependencies中定义了<dependencyManagement>,
其中定义了一系列的依赖及其版本,
<dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.4.4.RELEASE</version> </dependency> </dependencies> </dependencyManagement>
那 dependencyManagement有什么用呢?
我们通过它的元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号
非常细致的解答,我专门去.m2找了下<spring-boot-dependencies-1.5.6.RELEASE.pom>,果不其然。
maven设计的确是优雅。
参考http://blog.csdn.net/wo541075754/article/details/51490711
子项目无需指定版本号
但是mysql与spring-boot的groupId不同啊。不可能直接使用spring-boot的version号的。
难道还是找寻mysql的最新版本?
多谢。你的答案很好,可对于没有概念的我,@苍枫露雨 的答案更容易理解。
在使用boot之前 一般会把依赖管理引入进来 也就是springboot提供一个依赖项目spring-boot-dependencies 如下
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
这个项目的pom.xml定义了mysql的版本 也就是这个项目会把相关的jar定义好 子项目直接引用而不用写版本号就是这个原因。如果import的pom.xml没有你想要的jar及版本。子项目中也是需要写版本号的。
多谢,看来@苍枫露雨 再来看你的答案,才看懂了。