maven 实战经验

配置本地仓库 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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值