首页新闻找找看学习计划

springboot的jar包依赖,版本选择策略

0
悬赏园豆:5 [已解决问题] 解决于 2017-08-24 09:29

初试了下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版本

许仙儿的主页 许仙儿 | 初学一级 | 园豆:198
提问于:2017-08-18 09:27
< >
分享
最佳答案
1

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元素中指定的版本号

收获园豆:4
苍枫露雨 | 小虾三级 |园豆:1027 | 2017-08-21 21:24

非常细致的解答,我专门去.m2找了下<spring-boot-dependencies-1.5.6.RELEASE.pom>,果不其然。

maven设计的确是优雅。

许仙儿 | 园豆:198 (初学一级) | 2017-08-24 09:56
其他回答(2)
0

参考http://blog.csdn.net/wo541075754/article/details/51490711

子项目无需指定版本号

收获园豆:1
ycyzharry | 园豆:18832 (专家六级) | 2017-08-18 09:32

但是mysql与spring-boot的groupId不同啊。不可能直接使用spring-boot的version号的。

难道还是找寻mysql的最新版本?

支持(0) 反对(0) 许仙儿 | 园豆:198 (初学一级) | 2017-08-18 09:41

多谢。你的答案很好,可对于没有概念的我,@苍枫露雨 的答案更容易理解。

支持(0) 反对(0) 许仙儿 | 园豆:198 (初学一级) | 2017-08-24 09:57
0

在使用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及版本。子项目中也是需要写版本号的。

peachyy | 园豆:243 (菜鸟二级) | 2017-08-21 13:21

多谢,看来@苍枫露雨 再来看你的答案,才看懂了。

支持(0) 反对(0) 许仙儿 | 园豆:198 (初学一级) | 2017-08-24 09:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册