配置本地仓库 localRepository
打开maven 的setting文件,位置一般在 ${maven}/conf/settings.xml文件中
表⽰Maven⽤来在本地储存信息的本地仓库的⽬录。默认是⽤户家⽬录下⾯的.m2/repository⽬录。
win配置
参考https://jingyan.baidu.com/article/a681b0de24141a7a184346eb.html
加载jar包顺序
maven——pom.xml——(查找)本地仓库——(下载)远程仓库
依赖冲突
由于依赖传递现象的存在, spring-webmvc-5.3.3依赖spring-beans-5.3.3 spring-aop-5.0.2 依赖spring- beans-5.0.2, 但是发现spring-bean-5.0.2加入到了工程中,而我们希望 spring-beans-5.3.3加入工程。这就造成了依赖冲突。
如何解决依赖冲突
使用maven提供的依赖调解原则
1,第一声明者优先原则
在pom文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。
<dependencies>
<!--spring-webmvc 是第一声明者,其他jar如果依赖的jar有与 spring-webmvc 相同的依赖,都以spring-webmvc的版本为主 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
spring-webmvc、spring-aop都依赖spring-beans,但是项目中依然引进的是5.2.8.RELEASE的版本,这种现象就是第一声明者优先原则。
2,路径近者优先原则
在pom文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。
<dependencies>
<!--spring-beans 的版本在项目中使用 5.2.1.RELEASE,不受其他相关jar包的依赖的版本影响,这就是路径优先原则-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
3,排除依赖
<dependencies>
<!--如果要在项目中要使用spring-beans的指定版本,可以将相关的依赖使用exclusions 来排除-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--由于spring-webmvc已经排除了spring-beans的包,所以spring-beans的版本是由spring-aop的决定的-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
4,锁定版本
采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。
方式:
第一步:在dependencyManagement标签中锁定依赖的版本
<!--dependencyManagement 标签内的jar并不会引入到项目中,这里只限制版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
第二步:在dependencies标签中声明需要导入的maven坐标
<!--dependencyManagement 已经对spring-core、spring-beans的版本号做了锁定,因此并不会受到相关依赖的影响-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.2.RELEASE</version>
</dependency>
</dependencies>
jar包上传私服
将项目发布到maven私服操作步骤:
1,配置远程服务器信息
在maven的setting中增加如下配置
<!-- 配置远程服务器信息 -->
<servers>
<server>
<!--仓库名,私服id,以及对应的账号密码-->
<id>nexus-releases</id>
<username>xxx</username>
<password>xxx</password>
</server>
</servers>
2,项目中配置pom.xml
<distributionManagement>
<repository>
<!--这里的id与server中配置的id要对应-->
<id>nx_release</id>
<name>私服仓库对应的用户名</name>
<!--这里的url就是私服仓库中对应库的地址-->
<url>http://localhost:8081/repository/release/</url>
</repository>
<snapshotRepository>
<!--这里的id与server中配置的id要对应-->
<id>nx_snapshots</id>
<name>nx_snapshots</name>
<!--这里的url就是私服快照仓库中对应库的地址-->
<url>http://localhost:8081/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
如何决定上传到私服的那个库
<groupId>com.qiangguo</groupId>
<artifactId>test_maven</artifactId>
<!--这里定义为SNAPSHOT,上传时就会对应上传到快照库-->
<version>1.0-SNAPSHOT</version>
<!--这里定义为RELEASE,上传时就会对应上传到RELEASE库-->
<!--<version>1.0-RELEASE</version>-->
3,执行mvn deploy命令
项目中如何优先使用本地的jar
<dependency>
<groupId>netbank.firm</groupId>
<artifactId>dcfirmsdk</artifactId>
<version>1.3</version>
<!--设置成system就不会去本地仓库中寻找-->
<scope>system</scope>
<!--这里这是相对路径,或者绝对路径-->
<systemPath>${project.basedir}/src/main/webapp/dcfirmsdk.jar</systemPath>
</dependency>