<dependency> 和 <dependencyManagement>

本文介绍了Maven中的《dependencies》和《dependencyManagement》的区别及其使用。《dependencyManagement》用于集中管理项目的依赖版本,当《dependencies》中的依赖未指定版本时,会从《dependencyManagement》中查找。如果作为父工程,子项目会继承《dependencies》的所有依赖,但《dependencyManagement》的依赖需要按需引入,版本自动匹配。此外,通过《type》和《scope》的设置可以实现依赖的导入。

1.《dependencises 》 和 《dependencyManagement》

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

a: 我们都知道依赖由三部分组成,《groupId》,《artifactId》以及版本号组成,但是上面的eureka依赖并未加版本号,当普通《dependencises 》中的依赖中为加版本号时,会自动去《dependencyManagement》寻找,若找不到就会爆红。
b: maven项目只支持单继承,就像java一样,如果你想继承其他的依赖可以通过下面这两个标签。

                <type>pom</type>
                <scope>import</scope>

注,该种写法只能写在 《dependencyManagement》中。

2.当使用《dependencises 》 和 《dependencyManagement》的项目作为父工程时,在微服务的项目中。
继承该项目的子项目会默认继承《dependencises 》 中的所有依赖,而《dependencyManagement》中的依赖并不是全部继承,而是你需要哪个依赖才注入哪个依赖,但需要注意的是不需要申明版本号,版本号和《dependencyManagement》中的依赖的版本号一致。

现在我将给你个子服务依赖,一个是父项目的依赖文件,帮我看一下为啥我子服务还需要配置数据库才能启动 子服务依赖<?xml version="1.0" encoding="UTF-8"?> <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>com.picc.xzpt.ai</groupId> <artifactId>piccxzpt_ai</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <parent> <groupId>com.picc.xzpt</groupId> <artifactId>piccxzpt</artifactId> <version>0.0.1</version> <relativePath>../pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>com.bes.appserver</groupId> <artifactId>bes-lite-spring-boot-2.x-starter</artifactId> <version>9.5.5.013</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <!-- <version>3.0.4</version>--> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.22.0</version> <scope>compile</scope> </dependency> <!-- <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.8.0</version> </dependency>--> <!-- <dependency>--> <!-- <groupId>org.mybatis.spring.boot</groupId>--> <!-- <artifactId>mybatis-spring-boot-starter</artifactId>--> <!-- <version>1.3.1</version>--> <!-- <exclusions>--> <!-- <exclusion>--> <!-- <groupId>ch.qos.logback</groupId>--> <!-- <artifactId>logback-classic</artifactId>--> <!-- </exclusion>--> <!-- <exclusion>--> <!-- <groupId>org.mybatis</groupId>--> <!-- <artifactId>mybatis</artifactId>--> <!-- </exclusion>--> <!-- </exclusions>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>org.mybatis</groupId>--> <!-- <artifactId>mybatis</artifactId>--> <!-- <version>3.5.6</version>--> <!-- </dependency>--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.13</version> </dependency> <!--基础库--> <dependency> <groupId>com.picc.xzpt.baselib</groupId> <artifactId>piccxzpt_baselib</artifactId> <version>0.0.75</version> <exclusions> <exclusion> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <!-- 添加以下排除项 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.3.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 热部署启动 --> <fork>true</fork> </configuration> </plugin> <!-- <plugin>--> <!-- <groupId>org.mybatis.generator</groupId>--> <!-- <artifactId>mybatis-generator-maven-plugin</artifactId>--> <!-- <version>1.3.5</version>--> <!-- <configuration>--> <!-- <!– generator 工具配置文件的位置 –>--> <!-- <configurationFile>src/main/resources/xml/generatorConfig.xml</configurationFile>--> <!-- <verbose>true</verbose>--> <!-- <overwrite>true</overwrite>--> <!-- </configuration>--> <!-- <dependencies>--> <!-- <!– oracle –>--> <!-- <dependency>--> <!-- <groupId>com.ibm.informix</groupId>--> <!-- <artifactId>jdbc</artifactId>--> <!-- <version>4.10.8.1</version>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>org.mybatis.generator</groupId>--> <!-- <artifactId>mybatis-generator-core</artifactId>--> <!-- <version>1.3.5</version>--> <!-- </dependency>--> <!-- </dependencies>--> <!-- </plugin>--> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> </project> 父项目依赖 <groupId>com.picc.xzpt</groupId> <artifactId>piccxzpt</artifactId> <packaging>pom</packaging> <version>0.0.1</version> <!-- <parent>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-parent</artifactId>--> <!-- <version>2.5.15</version>--> <!-- <relativePath/>--> <!-- </parent>--> <parent> <groupId>pdfc</groupId> <artifactId>pdfc-parent</artifactId> <version>4.2.8.4</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- <spring-cloud.version>2020.0.5</spring-cloud.version>--> <pdfc.version>4.2.8.4</pdfc.version> </properties> <dependencies> <!-- Web类型 --> <dependency> <groupId>pdfc</groupId> <artifactId>pdfc-web</artifactId> <version>${pdfc.version}</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>com.squareup.okio</groupId> <artifactId>okio</artifactId> </exclusion> <exclusion> <groupId>com.squareup.okio</groupId> <artifactId>okio-jvm</artifactId> </exclusion> <exclusion> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk18on</artifactId> </exclusion> <exclusion> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk18on</artifactId> </exclusion> <exclusion> <groupId> org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> <exclusion> <groupId> org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </exclusion> <exclusion> <groupId>io.github.classgraph</groupId> <artifactId>classgraph</artifactId> </exclusion> <exclusion> <groupId>org.owasp.antisamy</groupId> <artifactId>antisamy</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.squareup.okio</groupId> <artifactId>okio</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>com.squareup.okio</groupId> <artifactId>okio-jvm</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk18on</artifactId> <version>1.78.1</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk18on</artifactId> <version>1.78.1</version> </dependency> <dependency> <groupId>io.github.classgraph</groupId> <artifactId>classgraph</artifactId> <version>4.8.112</version> </dependency> <dependency> <groupId>org.owasp.antisamy</groupId> <artifactId>antisamy</artifactId> <version>1.7.5</version> </dependency> <!-- 微服务应用 --> <dependency> <groupId>pdfc</groupId> <artifactId>pdfc-cloud</artifactId> <version>${pdfc.version}</version> <exclusions> <exclusion> <artifactId>pdfc-config</artifactId> <groupId>pdfc</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.20</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <!-- <version>2.5.15</version>--> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- 热更新 开始 --> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-devtools</artifactId>--> <!--</dependency>--> <!-- 热更新 结束--> <!--sswagger2开始--> <!-- <dependency>--> <!-- <groupId>io.springfox</groupId>--> <!-- <artifactId>springfox-swagger2</artifactId>--> <!-- <version>2.9.2</version>--> <!-- <exclusions>--> <!-- <exclusion>--> <!-- <groupId>com.google.guava</groupId>--> <!-- <artifactId>guava</artifactId>--> <!-- </exclusion>--> <!-- </exclusions>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>com.google.guava</groupId>--> <!-- <artifactId>guava</artifactId>--> <!-- <version>32.0.1-android</version>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>io.springfox</groupId>--> <!-- <artifactId>springfox-swagger-ui</artifactId>--> <!-- <version>2.10.0</version>--> <!-- </dependency>--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.3</version> </dependency> <!--sswagger2结束--> <!--缓存方案--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--缓存方案结束--> <!-- 加密的依赖 开始--> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> </dependency> <!-- 加密的依赖 结束--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> <version>9.0.86</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.90</version> </dependency> <!-- 链路追踪 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.11</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.7.2</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency> <dependency> <groupId>com.ibm.informix</groupId> <artifactId>jdbc</artifactId> <version>4.10.8.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.5</version> </dependency> <!--基础库--> <dependency> <groupId>com.picc.xzpt.baselib</groupId> <artifactId>piccxzpt_baselib</artifactId> <version>0.0.97</version> <exclusions> <exclusion> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> </exclusion> <exclusion> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.28.4</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.10.0</version> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.owasp.esapi/esapi --> <dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi</artifactId> <version>2.5.3.0</version> <exclusions> <exclusion> <groupId>org.owasp.antisamy</groupId> <artifactId>antisamy</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
11-19
### 解决 Maven 依赖冲突与配置编译时依赖 在 Maven 项目中,当公共依赖与 B 服务存在重复依赖时,可以通过以下方法解决冲突,并确保某些依赖仅在编译时使用。 #### 配置依赖范围为 `provided` 如果希望某些依赖仅在编译时使用,而不将其打包到最终的 JAR 或 WAR 文件中,可以将依赖范围设置为 `provided`。此范围表示依赖在运行时由容器或环境提供,因此不需要被打包[^3]。 ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> ``` 通过这种方式,可以避免公共依赖与 B 服务中的依赖重复打包,同时确保编译阶段能够正常引用该依赖。 #### 使用 `dependencyManagement` 统一版本管理 为了防止不同模块引入相同依赖的不同版本,可以在项目的根 `pom.xml` 文件中定义统一的依赖版本管理规则。例如: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> </dependencies> </dependencyManagement> ``` 这样,所有子模块将继承统一的版本配置,从而减少版本冲突的可能性[^3]。 #### 排除冗余依赖 如果公共依赖中包含的某些依赖已经在 B 服务中存在,可以通过 `<exclusion>` 标签排除公共依赖中的冗余部分。例如: ```xml <dependency> <groupId>com.example</groupId> <artifactId>common-dependency</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </exclusion> </exclusions> </dependency> ``` 通过排除不必要的依赖,可以有效避免冲突并优化依赖树结构[^1]。 #### 强制指定依赖版本 如果仍然存在冲突,可以显式声明所需的依赖版本,Maven 将优先使用显式声明的版本。例如: ```xml <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> ``` 通过这种方式,可以确保所有模块使用一致的依赖版本[^1]。 #### 分析依赖层次结构 使用 Maven 提供的 `dependency:tree` 插件,可以分析项目的依赖树并定位潜在的冲突来源。例如: ```bash mvn dependency:tree ``` 根据输出结果,可以明确了解哪些模块引入了特定依赖以及其版本信息,从而采取适当的措施解决冲突[^2]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值