项目结构:
├─springcloud-alibaba
    ├─.idea
    ├─shop-common
    ├─shop-order
    ├─shop-product
    └─shop-user
项目环境:
父工程:
<properties>
    <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>
shop-common模块:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.56</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>
shop-product、shop-order、shop-user三个模块都引入了shop-common

 除了shop-common模块之外,其他三个模块的mysql连接器依赖的版本都是8.0.15。
 查阅资料后了解到这是maven的依赖原则的原因。
maven依赖原则:
最短路径原则 A -> B -> C -> D(V1)        F -> G -> D(V2)
    模块D重复引用依赖jar包,maven会自动选择最短的引用路径,所以模块D最后会选择V2版本的依赖。
 优先声明原则
    在引入依赖的时候直接声明版本则依赖使用当前版本。
    这次的问题就出在了maven的最短路径原则上,由于我的其他三个模块都是直接依赖于父工程的,引入了shop-common模块之后路径长了1,恰好父工程是一个springboot工程,里面已经默认配置了一个<mysql.version>8.0.15</mysql.version>,所以导致了其他三个模块都是使用的这个版本的依赖。
解决方案:
    在父工程中的properties标签锁定需要的版本依赖
<properties>
        <mysql.version>5.1.6</mysql.version>
</properties>

 其他的maven依赖原则
 MAVEN依赖的优先原则
 maven依赖的优先原则
 1.依赖最短路径优先原则
 一个项目Demo依赖了两个jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路径最短,所以项目使用的是X(2.0)。
 2.pom文件中申明顺序优先
 如果A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven会根据pom文件声明的顺序加载,如果先声明了B,后声明了C,那就最后的依赖就会是X(1.0)。
 3. 覆盖优先原则
 子pom内声明的优先于父pom中的依赖。
 原文连接


















