maven中的依赖

    xiaoxiao2021-12-14  72

           本篇博客介绍maven中的依赖,这个词并不陌生在学习UML图时4大关系同包括依赖这一项。Maven中的依赖大概也是这个意思,是指项目对jar包的依赖。        这种依赖是通过这个配置完成的,配置完毕后被依赖的jar本就会从本地仓库或私服或中央仓库被下载到项目中。下图为pom.xml的一般结构,其中“jar包引入”就是一个依赖,这个配置可以到 http://mvnrepository.com/中搜索自己想要引用的包,将GAV信息直接copy过来就可以完成引用。   依赖需要注意:        1、 配置依赖中的scope属性有四种选择             test:测试范围,编译和打包不使用该依赖。

                compile:编译范围,编译和打包使用,依赖传递。(默认项)

                provided:编译和测试有效,生成war包时不会加入,如servlet-api在tomcat中存在

                runtime:运行时依赖,编译时不依赖

           2、依赖传递冲突问题

                解决一:

                    规则:

                         层次一样,依赖先引用的传递

                         层次不一样,依赖最短的传递

                    示例一:(M表示模块

                         Ma——>b1.0,Mc——>b2.0,Md——>Ma&Mc                      如上:模块a依赖b的1.0版本,模块c依赖b的2.0版本,模块d同时依赖模块a和模块c 。如果d的pom中先                      写了对模块a(c)的依赖则d就依赖b的1.0(2.0)版本。

                   示例二:

                         Ma——>b1.0,Mc——>b2.0,Md——>Ma,Me——>Mc&Md

                         如上:不论先写c或d的那个依赖,e都依赖于b的2.0版本,因为这个传递路径短。

                解决二:

                     依赖排除:如上的第一个示例,如果不希望d传递依赖b1.0就在d的pom.xml中依赖a的dependency下的中添                  加exclusions进行排除。如下图:user-service中依赖user-log和user-dao,在log和dao模块中都用都log4j                    这个jar的引用,在log的依赖中添加如下的配置后service就只会使用user-dao中的log4j的jar包了。

    依赖继承

             当所做的项目比较大时会分为不同的模块,不同模块之间往往会依赖相同的jar包,如果引用的jar包版本不统一就会比较麻烦。Maven中的依赖继承就可以解决这个问题。类似面向对象中子类对父类方法属性的继承。

    操作:

           首先建立父项目,在eclipse中建立一个maven project,将Packaging的方法选为pom。          建立完毕项目我们只需要改动pom.xml配置文件。在这里可以将所有可能用到的jar包都配置起来,配置的格式如下,以下以一个引用为例: <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> <!—本项目GAV的相关信息 --> <groupId>com.dmsd</groupId> <artifactId>dmsd-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 集中定义依赖版本号 --> <properties> <junit.version>4.12</junit.version> </properties> <dependencyManagement> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencyManagement> </project>        公共的父项目建立完毕后就可以建立子项目,同样还是建立maven project,不同的地方是需要配置Parent Project的信息:          项目建立完毕后首先打开子项目pom.xml配置文件看文件头,会发现添加了parent标签,这里配置的就是依赖的父项目的GAV信息,同时在子项目添加引用时如果是父项目中已经有的jar包这本项目中添加时不再需要申明版本,只需要什么groupId和artifactId,统一使用父项目中的版本。 <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> <parent> <groupId>com.dmsd</groupId> <artifactId>dmsd-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.dmsd</groupId> <artifactId>taotao-dmsd</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 添加依赖 --> <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project> 依赖继承需要注意        1、选择性依赖继承          <dependencyManagement>:这个标签在父项目中添加依赖时使用,这样在子项目就不会继承父项目所有的依赖,而是需要在子相面中声明groupid和artifactid然后到父相面中寻找相应的jar包。 小结:        1、Maven使用配置完成项目对jar包的引用,这些依赖可以传递、可以被继承。        2、依赖的传递和依赖的继承在pom.xml中最直观的区别就是在继承中会出现<parent>标签,其中是父项目的信息。传递就是发生在一般的依赖<dependendy>配置中的。
    转载请注明原文地址: https://ju.6miu.com/read-964862.html

    最新回复(0)