maven项目管理工具阅读总结

一、初识maven

个人对maven使用的总结:
https://blog.csdn.net/ya_1249463314/article/details/61416711

二、关键概念之坐标和依赖

什么是坐标

在我们的工程中引用的jar包和war包等文件,我们需要通过坐标来对这些构件来进行唯一标识。所以坐标的作用就是为构件进行唯一标识。

坐标详解

groupId:就是定义当前的maven项目属于哪个公司的哪个项目,groupId的表示方式与java包名的表示方式类似,通常域名反向一一对应。
artifactId:就是项目中指定的模块。推荐做法是使用实际项目名称作为artifactId作为前缀。
version:就是maven项目中当前构件的版本号、
packaging:就是当前maven项目打包方式。如果写成jar,那么就打包成jar包。如果写war,就打包成war包。如果不定义packaging,那么默认值就打成jar。
classifier:就是帮助输出一些附属的构件。譬如文档doc,源码source等文件。但是要注意这个属性是不能直接定义的,附属构件是插件帮助生成的。

依赖的配置

依赖的前提是坐标,只有坐标定位,才能找到maven对应的依赖。
依赖的配置:
groupId artifactId version:依赖基本坐标
type:依赖的类型,对应于项目坐标定义的packaging。默认情况下声明为jar。
scope:依赖的范围。(compile:编译期依赖范围;test:测试依赖范围;provided:已提供范围,就是对于编译和测试classpath有效,运行时期无效;runtime:运行时依赖范围。对于测试和运行classpath时有效,但是编译主代码时无效;system:系统依赖范围)。
optional:可选依赖。我们知道依赖有传递性,A依赖于B,B依赖于C并且B依赖于D,如果B中设置optional属性为true,那么A将不会依赖于C和D。C和D只会对B产生影响。
exclusions:用来排除指定的依赖。由于依赖的传递性,就会给项目隐式的引入很多依赖,但是往往会带来一些冲突等问题。我们可以使用exclusions来排除多个冲突的依赖。

三、关键概念之仓库

什么是仓库

仓库就是用来存放构件的地方。

仓库的分类

本地仓库:每个用户都会在自己的windows、linux上拥有一个仓库目录。用来存放jar包。在settings.xml中配置。
中央仓库:面向全球的。远程仓库下载地址:http://repo1.maven.org/maven2
公司私服仓库:是一种远程仓库,部署在局域网中,方便整个团队的开发使用。

四、关键概念之生命周期

Maven的三套独立的生命周期
① clean生命周期:清理项目。
② default生命周期:构建项目。
③ site生命周期:建立项目站点。
clean生命周期
pre-clean执行清理前的准备工作
clean清理上一次构建生成的文件
post-clean执行一些清理后需要的工作
default生命周期
validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile编译项目中的主源码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test使用单元测试框架运行测试,但是注意的是测试的代码是不会被打包和部署的。
prepare-package
package接收编译好的代码,然后打包成指定的发布格式,譬如jar或war。
pre-integration-test
intergration-test
post-integration-test
verify
install将maven包安装到本地maven库,让本地的其他的项目来使用此包。
deploy将最终的包部署到远程仓库。让其他程序员和maven项目使用。
site生命周期
site生命周期就是建立和发布项目站点。
pre-site执行一些项目站点之前需要完成的工作。
site生成项目的文档。
post-site执行一些生成项目站点之后的工作。
site-deploy将项目站点发布到服务器。

关键常用命令

mvn clean命令就是执行clean生命周期中的clean阶段(清理上一次构建的文件)。
mvn test命令就是执行default生命周期中的test阶段(使用单元测试框架运行测试)。
mvn clean install命令就是执行了clean生命周期中的clean阶段和default生命周期中的install阶段(清理上一次构建的文件并且将maven包安装到本地maven库中)。
mvn clean deploy site-deploy命令就是执行了clean生命周期的clean阶段、default生命周期的deploy阶段、site生命周期的site-deploy阶段(清理上一次构建的文件、将maven包安装到本地maven库中、将项目站点发布到服务器)。


补充:
mvn compile命令执行default生命周期中的compile阶段(编译项目中的主源码)。
mvn package命令执行default生命周期中的package阶段(将代码打包成指定的格式)。

五、关键概念之聚合

什么是聚合

聚合就是为了满足我们一次想构建多个项目,而不是去每个项目专门的构建一遍。达到快速构建项目的目得。

聚合如何实现

采用pom打包多个module元素来实现多个项目模块的聚合。
例子:


1.jpg

maven-parent的pom文件:




  4.0.0

  cn.spy
  maven-parent
  0.0.1-SNAPSHOT
  pom
  maven-parent

  
    ../maven-first
    ../maven-second
    ../maven-third
  
  
  
    
      junit
      junit
      4.11
      test
    
  


执行maven install命令


maven项目管理工具阅读总结_第1张图片
2.jpg

解释:
maven会首先解析聚合模块的pom文件。分析要构建的模块并且计算反应堆构建顺序。然后按照这个顺序构建各个模块。

六、关键概念之继承

什么是继承

项目模块与项目模块之间会存在调用重复jar包的情况。为了消除这个情况,使用继承来消除重复配置。

继承的实现

例子:
maven-parent的pom配置




  4.0.0

  cn.spy
  maven-parent
  0.0.1-SNAPSHOT
  pom
  maven-parent

  
    
      junit
      junit
      4.11
      test
    
    
    
    
        com.alibaba
        fastjson
        1.2.31
    
  
  

注意:我在maven-parent中加入了fastjson的jar包依赖配置。当maven-first项目模块继承maven-parent项目模块就会发现maven-first项目会自动依赖了fastjson的jar包了。
maven-first项目模块的pom文件配置:




  4.0.0
   
  
    cn.spy
    maven-parent
    0.0.1-SNAPSHOT
    ../maven-parent/pom.xml
  
  
  cn.spy
  maven-first
  1.0.1-SNAPSHOT
  maven-first

解释:可以发现maven-first也引入了fastjson的jar包

maven项目管理工具阅读总结_第2张图片
4.jpg

注意:
① 父类maven-parent项目模块的packaging打包类型必须为pom。
② relativePath表示父模块相对路径。当项目构建时,会根据relativePath去检查父类的pom。如果没找到,就从本地仓库中找。
③ maven默认父pom在上一层目录。

七、关键概念之依赖管理

继承的引发的问题

如果子项目模块继承了父项目模块的pom,那么就会自动依赖父项目模块的jar包了。如果子项目模块想要根据实际需要引入父项目模块的jar包,那么就需要dependencyManagement元素。这样就可以增加继承的灵活性。

dependencyManagement元素的使用

maven-parent的pom文件:




  4.0.0
   cn.spy
  maven-parent
  0.0.1-SNAPSHOT
  pom
  maven-parent
  
    1.2.31
    4.11
  
  
  
     
        
          junit
          junit
          ${junit.version}
          test
        
        
        
        
            com.alibaba
            fastjson
            ${fastjson.version}
        
      
  

maven-second项目模块的pom文件:




  4.0.0
  
    cn.spy
    maven-parent
    0.0.1-SNAPSHOT
    ../maven-parent/pom.xml
  
  maven-second
  maven-second

  
    
        junit
        junit
    
  

maven项目管理工具阅读总结_第3张图片
5.jpg

解释:
可以发现虽然maven-second项目模块继承maven-parent但是只对junit的jar包进行了引用,对于不需要的fastjson的jar包并没有引用。
常用元素总结:
description:项目的描述信息。
inceptionYear:项目的创始年份。
distributionManagement:项目的部署配置。
properties:自定义的maven属性。
repositories:项目的仓库配置。
build:项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。
reporting:项目的报告输出目录配置、报告插件配置等。

你可能感兴趣的:(maven项目管理工具阅读总结)