前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven其他知识

Maven其他知识

作者头像
暴躁的程序猿
发布2022-03-24 16:08:05
2490
发布2022-03-24 16:08:05
举报

Maven 的好处

节省磁盘空间 可以一键构建 可以跨平台 应用在大型项目时可以提高开发效率

坐标的书写规范

groupId 公司或组织域名的倒序 artifactId 项目名或模块名 version 版本号

如何添加坐标

1、在本地仓库中搜索 2、互联网上搜,推荐网址 http://www.mvnrepository.com/

依赖范围

在这里插入图片描述
在这里插入图片描述

默认引入 的 jar 包 ------- compile (默认范围 可以不写)(编译、测试、运行 都有效 ) servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突) jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 ) junit ----- test (测试有效)

什么是依赖传递

例:当我们导入springmvc 的核心依赖的坐标,会发现出现除了 spring-webmvc 以外的其他 jar。因为我们的项目依赖 spring-webmv.jar,而spring-webmv.jar 会依赖 spring-beans.jar 等等,所以 spring-beans.jar 这些 jar 包也出现在了我们的 maven 工程中,这种现象我们称为依赖传递。

依赖冲突的解决

当我们再添加一个spring-context坐标,我们会发现这两个 jar 包同时都依赖了 spring-beans但是 spring-webmvc 依赖 spirng-beans-4.2.4,spring-context 依赖 spring-beans-5.0.2,但是发现 spirng-beans-4.2.4 加入到工程中而我们希望 spring-beans-5.0.2 加入工程。这就造成了依赖冲突。解决依赖冲突有以下原则:

代码语言:javascript
复制
  <!--maven工程要导入jar包的坐标,就必须考虑解决jar包冲突。
     解决jar包冲突的方式一:
       第一声明优先原则:哪个jar包先声明,这个jar包就是先声明的
        先声明的jar包坐标下的依赖包,可以优先进入项目中。
       maven导入jar中的一些概念:
       直接依赖:项目中直接导入的jar包就是该项目的直接依赖包
       传递依赖:项目中没有直接导入的jar包可以通过项目直接依赖jar包传递到项目中去。
     解决jar包冲突的方式二:
       路径近者优先原则:直接依赖路径比传递依赖路径近,最后项目中导进的jar包会是路径近的直接依赖包
     解决jar包冲的突方式三:
       直接排除法(推荐使用):
       当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。
       因为此时依赖包使用的版本默认和本jar包一样
    -->

锁定版本 面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

代码语言:javascript
复制
 <!--
        maven工程可以分父子依赖关系
        凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖。
        例如:当前A项目,被b项目依赖,那么我们A项目中的所有jar包都会传递到B项目中。
        B项目开发者如果再在B项目中导入一套ssm框架的jar包,对于B项目是直接依赖
        那么直接依赖的jar包就会把我们A项目传递过去的jar包覆盖掉
        为了防止以上情况的出现,我们可以把A项目中的主要jar包的坐标锁住
        即便是有同名jar包直接依赖,也无法覆盖。
        -->
代码语言:javascript
复制
 <!-- 锁定jar包版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
      </dependencyManagement>

还可以把版本号提取出来,使用标签设置成变量

代码语言:javascript
复制
<properties>
        <spring.version>5.0.2.RELEASE</spring.version>
 </properties>

工程和模块

代码语言:javascript
复制
 <!--
            工程和模块的区别:
               工程不等于完整的项目,模块也不等于完整的项目,一个完整的模块看的是代码,代码完整,就可以说这是一个完整的项目
               和此项目是工程和模块没有关系。

               工程天生只能使用自己内部资源,工程天生是独立的,后天可以和其他工程或模块建立关联关系。
               模块天生不是独立的,模块天生属于父工程的,模块一旦创建,所有的父工程的资源都可以使用。

               父工程之间,子模块天生集成父工程,可以使用父工程的所有资源;
               子模块之间天生没有任何关系。

               父子工程之间不用建立关系,继承关系是先天的,不需要手动建立。

               平级之间的引用叫依赖,依赖不是先天的,依赖是后天建立的。
        -->
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是依赖传递
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档