Maven是一个Java工程的管理工具,跟其相同功能的工具如Gradle,Maven通过项目对象模型(POM:Project Object Model)用来描述整个项目,也就是POM.xml文件,使用Maven能够方便的管理JAR包依赖,Maven将当前工程需要的JAR 包从远程仓库下载到本地并自动完成依赖的传递,每个JAR有唯一标识也就是坐标,这是依赖可维护性的基础,Maven中的坐标是通过groupId、artifactId、version、packaging、classfier等这些元素定义。
maven下载,windos系统下载后无需安装,放在一个路径中不带空格的文件夹,如program Files这个目录不能放,然后在系统环境变量中配置一下maven/bin的路径:

path中添加%MAVEN_HOME%\bin

验证maven安装成功,ctrl+R,进入cmd:

Maven安装目录下conf/settings.xml是maven配置文件,主要完成maven默认的本地仓库地址,远程仓库地址,jdk版本,profile,私服地址等的定义,大部分情况下需要修改部分标签,顶级标签如下,具体的使用方式和描述如下:Maven配置文件标签详解
大部分情况下需要修改的标签介绍如下;
windos下载安装后默认的本地仓库地址是windos用户下的/.m2/repository文件中,需要在conf/settings.xml中配置本地的仓库地址:
D:\softtools\my-maven
同时,默认的远程仓库国内肯定是可慢或者不可达,需要修改成settings.xml中的配置:
nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
这个根据maven中当前的配置情况和本地项目依赖情况配置jdk版本:
jdk-1.8 true 1.8 1.8 1.8 1.8
规范情况下会使用内网搭建的nexus私服来代替远程镜像,本地项目直接从私服地址拉取依赖包,这样做的好处有:

.修改maven配置文件
[root@jenkins ~]# vim /etc/maven/settings.xml
#找到 标签,添加 Nexus 默认认证信息:my-nexus-releases admin #nexus的账号admin123 #nexus的密码my-nexus-snapshot admin #nexus的账号admin123 #nexus的密码 #找到 标签,添加镜像:1nexus * http://192.168.81.210:8081/repository/maven-public/ #nexus中maven-public的地址 #找到 标签,添加仓库信息:nexus central http://192.168.81.210:8081/repository/maven-public/ #nexus中maven-public的地址true true central http://192.168.81.210:8081/repository/maven-public/ #nexus中maven-public的地址true true #激活仓库:
nexus
当我们在idea中创建了一个maven工程后,最外层目录会有POM.xml,用来进行项目依赖管理,其中有很多标签/属性来定义当前正在开发的Java项目,全量的POM标签可参考:Maven 菜鸟教程,这里只介绍部分最常用和需要知道的标签。
4.0.0 com.companyname.project-group project 1.0
工程的根标签,也是POM中最顶级的标签,所有标签都在这个project标签内;
模型版本需要设置为 4.0。
这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.alibaba.project-group 拥有所有的和银行相关的项目。
这是工程的标识,它通常是工程的名称。
这是工程的版本号。在同个 artifact 仓库中可以用来区分不同的版本。例如:com.alibaba.bank:consumer-banking:1.1
properties标签内可以把版本号作为变量进行声明,方便maven依赖标签用${变量名}的形式动态获取版本号。这样做的优点是当版本号发生改变时,仅仅需要更新properties标签中的变量值就行,比如定义一个lombok的版本号:
13 1.18.10
那么在依赖定义的时候可以直接使用lombok.version进行引用。
org.projectlombok lombok true ${lombok.version}
这里是依赖定义的顶级标签,其下是dependency标签,每个依赖通过groupId,artifactId,version三个标签找到唯一的jar包,但也有一些作用范围或者排除项,如下:
classifier标签groupId,artifactId,version标签后面使用,可以简单地看做字符串的拼接,用于区分不同的工作环境,如果groupId,artifactId,version相同但jdk版本不同,需要定义固定的jdk版本等,具体看该依赖是否要加;
type标签有:pom,jar ,test-jar,maven-plugin,ejb,ejb-client,war,ear,rar,java-source,javadoc,如果不指定,默认为jar.一般开发中常用的是jar,war,pom等;
scope标签主要用于指定依赖的作用范围,其中有如下取值:
systemPath:仅当scope为system时才可以使用。否则,如果设置了这个元素,构建时将会失败。systemPath的路径必须是绝对路径,这里可以利用properties的属性来指定。例如${java.home}/lib。
exclusions:排除依赖中不需要的项
optional:默认值:false。optional=true 表示此依赖包不会在其他项目中被引用加载、不参与maven的依赖传递。
build标签描述如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成。当然plugin配置不是必须的,默认情况下Maven 的生命周期足够完成基本操作,可以通过idea右侧的maven的Lifecycle查看,集成外部的plugins目的是绑定生命周期做额外的操作;
: 项目或者组织的唯一标识
项目的通用名称
项目的通用名称
项目的版本 是否加载该插件的扩展,默认为false
该插件的中的配置是否可以被继承,默认为true
该插件所需要的特色配置,在父子项目项目之间可以覆盖或被合并
该插件所特有的依赖类库
该插件的某个goal(一个插件可能有多个goal)的执行方式.一个有如下设置
唯一标识
要执行的插件的goal.这个是可以有多个的
插件的goal要嵌入到Maven的phase中执行
该execution是否可被子项目继承
该execution的其他配置参数
可以使用maven-compiler-plugin插件配置JDK版本:
org.apache.maven.plugins maven-compiler-plugin 3.10.1 11 11 UTF-8
在使用idea在打开通过spring.io创建的springboot工程后,工程的glugin中会默认有spring-boot-maven-plugin标签:
org.springframework.boot spring-boot-maven-plugin 2.3.7.RELEASE com.example.sprintbootparent.SprintbootParentApplication
在idea右侧的plugins中可以发现spring-boot-maven-plugin提供了6个maven goal:


用户控制工程中的资源目录,如springboot默认使用aplication.properties,如果想用别的可以使用该标签。
标签的作用是进行依赖(jar包)的版本控制,防止依赖版本出现多个而发生冲突,用来管理子项目的公共的依赖,保证所有的子项目使用依赖项的统一版本,如springboot工程的默认添加如下:
org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import
如果该工程有子工程,在子工程的pom中添加:
springboot-parent com.example 0.0.1-SNAPSHOT
那么子工程使用springboot相关包不需要指定版本号:
org.springframework.boot spring-boot-starter-web
这是因为spring-boot-dependencies,定义了几百个依赖版本号,子项目继承了父项目的依赖定义;
repositories标签的作用是用来配置maven项目的远程仓库,settings.xml定义后不需要特殊定义,私服需要修改;
distributionManagement的作用是"分发构件至远程仓库",mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件,私服时使用;
父项目定义子项目用到;
springboot-demo springboot-security juc springboot-nacos springcloud-gateway springcloud-login springboot-common


上一篇:不要想过去和现在,把过去推销出去
下一篇:ARM pwn 入门 (3)