SpringBoot实践(三十三):Maven使用及POM详解
创始人
2024-01-20 08:05:59

文章目录

    • maven是什么
    • maven怎么装
    • settings.xml
      • 本地仓库地址:localRepository
      • 远程镜像:mirrors
      • JDK 版本:profile
      • 私服配置
    • POM.xml中的常用标签
      • project
      • modelVersion
      • groupId
      • artifactId
      • version
      • properties
      • dependencies
      • build和plugins
      • resources
      • dependencyManagement
      • repositories
      • distributionManagement
      • modules
    • 依赖管理

maven是什么

Maven是一个Java工程的管理工具,跟其相同功能的工具如Gradle,Maven通过项目对象模型(POM:Project Object Model)用来描述整个项目,也就是POM.xml文件,使用Maven能够方便的管理JAR包依赖,Maven将当前工程需要的JAR 包从远程仓库下载到本地并自动完成依赖的传递,每个JAR有唯一标识也就是坐标,这是依赖可维护性的基础,Maven中的坐标是通过groupId、artifactId、version、packaging、classfier等这些元素定义。

maven怎么装

maven下载,windos系统下载后无需安装,放在一个路径中不带空格的文件夹,如program Files这个目录不能放,然后在系统环境变量中配置一下maven/bin的路径:
在这里插入图片描述
path中添加%MAVEN_HOME%\bin
在这里插入图片描述
验证maven安装成功,ctrl+R,进入cmd:
在这里插入图片描述

settings.xml

Maven安装目录下conf/settings.xml是maven配置文件,主要完成maven默认的本地仓库地址,远程仓库地址,jdk版本,profile,私服地址等的定义,大部分情况下需要修改部分标签,顶级标签如下,具体的使用方式和描述如下:Maven配置文件标签详解



大部分情况下需要修改的标签介绍如下;

本地仓库地址:localRepository

windos下载安装后默认的本地仓库地址是windos用户下的/.m2/repository文件中,需要在conf/settings.xml中配置本地的仓库地址:


D:\softtools\my-maven

远程镜像:mirrors

同时,默认的远程仓库国内肯定是可慢或者不可达,需要修改成settings.xml中的配置:

	nexus-aliyuncentralNexus aliyunhttp://maven.aliyun.com/nexus/content/groups/public

JDK 版本:profile

这个根据maven中当前的配置情况和本地项目依赖情况配置jdk版本:

jdk-1.8true1.81.81.81.8

私服配置

规范情况下会使用内网搭建的nexus私服来代替远程镜像,本地项目直接从私服地址拉取依赖包,这样做的好处有:

  • 防止内部代码外协;
  • 规范化所有项目的基础依赖,统一版本号,比如springboot相关依赖;
  • 可以将内部工程进行模块化后内部进行共享和依赖,比如常用的工具类封装成common工程等;
    在这里插入图片描述
    如果已经搭建并配置好nexus,在settings.xml中修改配置如下;
.修改maven配置文件
[root@jenkins ~]# vim /etc/maven/settings.xml
#找到  标签,添加 Nexus 默认认证信息:my-nexus-releasesadmin      #nexus的账号admin123   #nexus的密码my-nexus-snapshotadmin      #nexus的账号admin123   #nexus的密码#找到  标签,添加镜像:1nexus*  http://192.168.81.210:8081/repository/maven-public/    #nexus中maven-public的地址#找到  标签,添加仓库信息:nexuscentralhttp://192.168.81.210:8081/repository/maven-public/    #nexus中maven-public的地址truetruecentralhttp://192.168.81.210:8081/repository/maven-public/    #nexus中maven-public的地址truetrue#激活仓库:
nexus

POM.xml中的常用标签

当我们在idea中创建了一个maven工程后,最外层目录会有POM.xml,用来进行项目依赖管理,其中有很多标签/属性来定义当前正在开发的Java项目,全量的POM标签可参考:Maven 菜鸟教程,这里只介绍部分最常用和需要知道的标签。

4.0.0com.companyname.project-groupproject1.0

project

工程的根标签,也是POM中最顶级的标签,所有标签都在这个project标签内;

modelVersion

模型版本需要设置为 4.0。

groupId

这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.alibaba.project-group 拥有所有的和银行相关的项目。

artifactId

这是工程的标识,它通常是工程的名称。

version

这是工程的版本号。在同个 artifact 仓库中可以用来区分不同的版本。例如:com.alibaba.bank:consumer-banking:1.1

properties

properties标签内可以把版本号作为变量进行声明,方便maven依赖标签用${变量名}的形式动态获取版本号。这样做的优点是当版本号发生改变时,仅仅需要更新properties标签中的变量值就行,比如定义一个lombok的版本号:

    131.18.10

那么在依赖定义的时候可以直接使用lombok.version进行引用。

org.projectlomboklomboktrue${lombok.version}

dependencies

这里是依赖定义的顶级标签,其下是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标签主要用于指定依赖的作用范围,其中有如下取值:

  1. compile:maven的默认范围,作用在所有范围 可以依赖传递;
  2. provided :只在编译和测试时生效,正式发布jar包或者war包时该依赖不会被包含进去,不会传递
  3. runtime:只在运行时和测试时生效,典型的是数据库驱动依赖,可以依赖传递
  4. test :只在测试时生效,不会依赖传递;
  5. system:表明该依赖不会从中央仓库查找,而是从用户指定的systemPath位置获取,与systemPath共同使用

systemPath:仅当scope为system时才可以使用。否则,如果设置了这个元素,构建时将会失败。systemPath的路径必须是绝对路径,这里可以利用properties的属性来指定。例如${java.home}/lib。
exclusions:排除依赖中不需要的项
optional:默认值:false。optional=true 表示此依赖包不会在其他项目中被引用加载、不参与maven的依赖传递。

build和plugins

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.pluginsmaven-compiler-plugin3.10.11111UTF-8

在使用idea在打开通过spring.io创建的springboot工程后,工程的glugin中会默认有spring-boot-maven-plugin标签:

    org.springframework.bootspring-boot-maven-plugin2.3.7.RELEASEcom.example.sprintbootparent.SprintbootParentApplication

在idea右侧的plugins中可以发现spring-boot-maven-plugin提供了6个maven goal:
在这里插入图片描述

  • build-info:生成项目的构建信息文件 build-info.properties
  • help:用于展示spring-boot-maven-plugin的帮助信息。
  • repackage:可生成可执行的jar包或war包。插件的核心goal。
  • run:运行 Spring Boot 应用
  • tart:在集成测试阶段,控制生命周期
  • stop:在集成测试阶段,控制生命周期,
    打包主要使用的是repackage ,它是spring-boot-starter-parent为插件设置的默认goal。这个goal绑定在maven的 package生命周期上,完整命令为mvn package spring-boot:repackage。在 mvn package 执行打包之后,repackage 再次打包生成可执行的 jar包或war包。
    还有一个妙用就是,将spring-boot-maven-plugin引入普通非springboot工程的pom,执行 mvn package 命令,即可打jar包(插件默认打jar包),target文件夹里的 *.jar即为可执行,jar包默认胖包;普通工程使用spring-boot-maven-plugin标签
    在这里插入图片描述

resources

用户控制工程中的资源目录,如springboot默认使用aplication.properties,如果想用别的可以使用该标签。

dependencyManagement

标签的作用是进行依赖(jar包)的版本控制,防止依赖版本出现多个而发生冲突,用来管理子项目的公共的依赖,保证所有的子项目使用依赖项的统一版本,如springboot工程的默认添加如下:

   org.springframework.bootspring-boot-dependencies${spring-boot.version}pomimport

如果该工程有子工程,在子工程的pom中添加:

    springboot-parentcom.example0.0.1-SNAPSHOT

那么子工程使用springboot相关包不需要指定版本号:

		org.springframework.bootspring-boot-starter-web

这是因为spring-boot-dependencies,定义了几百个依赖版本号,子项目继承了父项目的依赖定义;

repositories

repositories标签的作用是用来配置maven项目的远程仓库,settings.xml定义后不需要特殊定义,私服需要修改;

distributionManagement

distributionManagement的作用是"分发构件至远程仓库",mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件,私服时使用;

modules

父项目定义子项目用到;

    springboot-demospringboot-securityjucspringboot-nacosspringcloud-gatewayspringcloud-loginspringboot-common

依赖管理

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

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
金属硬度排行 各种金属硬度 世界上最硬的东西排名分别为硫化碳块,石墨烯,金刚石,金属玻璃和金属锇。这五种物体几乎是整个世界上最坚...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...