【Maven高级】学习笔记

先对maven基础知识进行回顾:

  • maven是一个项目管理工具。其有两大核心功能:依赖管理和一键构建。
  • 依赖管理:maven对项目中jar包的管理过程。传统工程中,我们直接把jar包放置在项目中;maven工程将真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
  • 一键构建:maven自身集成了Tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作。
  • 仓库种类:本地仓库、远程仓库【私服】、中央仓库。
  • 仓库之间的关系:
    1. 当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应的jar包。
    2. 默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库。
    3. 在公司中,如果本地没有对应jar包,会先从私服下载jar包;如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。
  • maven常用命令:clean、compile、test、package、install、deploy。
  • maven三套生命周期:清理生命周期、默认生命周期、站点生命周期。

1.maven导入jar包时冲突解决

maven工程要导入jar包的坐标,就必须要考虑解决jar包的冲突。

  • 解决jar包冲突的方式一:
    第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。

  • 解决jar包冲突的方式二:
    路径近者优先原则:直接依赖路径比传递依赖路径近,那么最终项目中的jar包是路径近的直接依赖包。

  • 解决jar包冲突的方式三:
    直接排除法【推荐】:当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。因为此时依赖包使用的版本默认和本jar包一样。

    maven导入jar包中的一些概念:

    • 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
    • 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。

2.使用 标签锁定jar包版本

2.1 为什么需要“锁定jar包版本”

maven工程是可以分父子依赖关系的。凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖。

比如:A项目,被B项目依赖。此时A项目中的所有jar包都会传递到B项目中。
B项目开发者,如果再在B项目中导入一套SSM框架的jar包,对于B项目是直接依赖,那么直接依赖的jar包就会把A项目传递过去的jar包覆盖掉。
为防止以上情况的出现,我们可以把A项目中的主要jar包的坐标锁住,那么其他依赖该项目的项目中,即便是有同名jar包直接依赖,也无法覆盖。

2.2 如何“锁住jar包”?

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-aopartifactId>
      <version>${spring.version}version>
    dependency>
  dependencies>
<dependencyManagement>  

3. maven项目中的【工程】和【模块】

3.1 工程和模块的区别
  • 工程不等同于完整的项目,模块也不等同于完整的项目。一个完整的项目看的是代码是否完整,代码完整,就可以说这是一个完整的项目,和此项目是工程或是模块没有关系。
  • 工程天生只能使用自己内部资源,其天生是独立的。后天可以和其他工程或模块建立关联关系。
  • 模块天生不是独立的,模块天生是属于父工程的。模块一旦创建,所有父工程的资源都可以使用。
3.2 工程和模块的关系
  • 父子工程之间,子模块天生继承父工程,可使用父工程所有资源。父子工程之间的继承关系是先天的,不需要手动建立。
  • 子模块之间没有任何关系。
  • 平级之间的引用叫依赖,依赖不是先天的,是需要后天建立的。

你可能感兴趣的:(框架学习,项目管理,maven)