Maven中dependencyManagement的一点点说明

来源:互联网 发布:java多线程机制 编辑:程序博客网 时间:2024/05/21 12:46

maven中dependencyManagement的使用无非就是统一控制依赖的版本,但是在一些情况下modules自身指定的版本是无效的
例如:

//parent pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>love.llnn</groupId>    <artifactId>mavendep</artifactId>    <version>1.0-SNAPSHOT</version>    <modules>        <module>web</module>        <module>service</module>    </modules>    <packaging>pom</packaging>    <name>mavendep</name>    <dependencyManagement>        <!-- 片段1 start -->        <dependencies>            <dependency>                <groupId>org.mybatis</groupId>                <artifactId>mybatis</artifactId>                <version>3.1.0</version>            </dependency>        </dependencies>        <!-- 片段1 end-->    </dependencyManagement></project>//web pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>mavendep</artifactId>        <groupId>love.llnn</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>web</artifactId>    <packaging>war</packaging>    <name>web</name>    <dependencies>        <dependency>            <groupId>love.llnn</groupId>            <artifactId>service</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>    </dependencies></project>//service pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>mavendep</artifactId>        <groupId>love.llnn</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>service</artifactId>    <packaging>jar</packaging>    <name>service</name>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>    <dependencies>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.0</version>        </dependency>    </dependencies></project>

如下是结构图
这里写图片描述

如果存在“片段1”,web打包之后mybatis版本是3.1.0
执行

mvn dependency:tree[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ web ---[INFO] love.llnn:web:war:1.0-SNAPSHOT[INFO] \- love.llnn:service:jar:1.0-SNAPSHOT:compile[INFO]    \- org.mybatis:mybatis:jar:3.1.0:compile (version managed from 3.4.0)

原因是:mybais对于web项目是间接依赖,间接依赖时dependencyManagement优先级更高!!!!!

解决方法是:所有的版本依赖都在parent项目中控制

如果根pom还有parent时,间接依赖时dependencyManagement的优先级别高!!!!,此时的解决方法修改parent的parent pomxml,或者在parent中把它的parent重写掉

0 0
原创粉丝点击