Maven

1.工作原理

  • pom.xml:project object model,是项目对象模型
  • Plug-in:插件

2.Maven的安装

网上下载个maven二进制包,在环境变量中配置一下bin目录即可

3.Setting.xml(配置)

3.1本地仓库

需要注意的是windows电脑上的目录是,不要整错

3.2配置国内镜像仓库

3.3配置maven构建项目JDK版本

4.GAVP属性

Maven中的GAVP指的是Group ID、Artifact ID、Version、Packing等四个属性的缩写,前三个是必要的,而Packing是可选的,默认的是jar包。GAVP相当于在Maven仓库中做一个标识。

  • GroupID:一般格式为公司域名.业务线,最多四级。例如com.taobao.tddl
  • ArtifactID:产品线-模块名,例如:tair-tool
  • Version:主版本.次版本.修订号
    • 主版本:增加了能改变产品方向的新功能
    • 次版本:做了向下兼容的功能性新功能
    • 修订号:修改了版本
  • Packing:打包方式
    • jar:默认打包方式
    • war:web打包
    • pom:父工程专用,用于聚合工程

5.Maven工程的结构说明

6.构建

项目构建是指的将源代码】依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

6.1编译

将maven工程中的java文件、资源文件生成对应的class文件,放到target目录(与src同级)

bash 复制代码
mvn compile

6.2清理

清理生成的target目录

bash 复制代码
mvn clean

6.3编译测试类

maven工程中,测试类以Test结尾,测试方法以test开头

bash 复制代码
mvn test-compile

6.4运行测试方法

bash 复制代码
mvn test

6.5打包

将target打包为jar包/war包,打包前会先经过测试

bash 复制代码
mvn package

6.6安装

将jar包安装到本地

bash 复制代码
mvn install:install-file -Dfile=jar包文件地址 -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dpackaging=jar

6.7生命周期

构建生命周期就是一组固定构建命令的有序集合,出发周期后的命名,会自动触发周期前的命令,例如mvn package包含了compile test package install deploy命令

7.依赖管理

bash 复制代码
<dependencies>
	# 用于管理依赖
</dependencies>
<properties>
  # 用于属性管理,常用于定义依赖版本
</properties>

8.依赖范围

9.自定义打包名称

bash 复制代码
<finalName>wys</finalName>
# jar包会带上.jar,war包会带上.war

10.依赖传递

  • A依赖于B,B依赖于C,A就是依赖于C,这就是依赖传递

  • 依赖传递只适用于scope为compile

  • option为true,终止传递

  • 依赖冲突,终止传递

11.依赖冲突

当直接引用或者间接应用出现了相同的jar包,就发生了依赖冲突。依赖冲突分为两种,分别为:自动选择原则和手动选择原则

  • 自动选择原则:
    • 短路优先原则(第一原则):例如,A依赖于B,B依赖于C(V1.0.0),A又依赖于C(V2.0.0),则会使用C(V2.0.0)
    • 依赖路径长度相同情况下,则先声明优先,在中,先声明的,路径相同,会优先选择
  • 手动选择原则:

11.Maven继承

Maven继承是指在Maven项目中,让一个项目从另一个项目中集成配置信息的机制,继承可以让我们在多个项目中共享同一个配置信息,方便项目的管理。

  • 父工程需要设置打包方式为POM

  • 子工程的GroupID和Version要与父工程相同

  • 子工程需要设置parent标签,设置父工程的信息

  • 子工程由于Group ID和Version要与父工程相同,因此子工程中不需要设置GroupID和Version

  • 父工程中的Dependencies会直接继承给子工程

  • 父工程中的DependencyManagement,子工程不会自动引入,子工程需要手动引入,但是需要注意的是,子工程手动引入的时候,是不需要Version的

12.Maven聚合

对父进行了什么操作,子工程也会进行什么操作,一键管理。需要在父工程中使用model标签引入子工程。

13.Maven私服

Maven私服是一种特殊的Maven远程仓库,是假设在局域网内的仓库服务,用来代理位于外部的远程仓库
建立的Maven私服后,当需要下载依赖的时候,首先回去本地仓库中找,然后再去私服找,最后才会从远程仓库中找。

13.1Docker中安装Nexus

yaml 复制代码
version: "3.3"
services:
  nexus:
    image: sonatype/nexus3:latest
    container_name: nexus3
    restart: always
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8081:8081"
      - "28082:28082"
    volumes:
      - /home/nexus/data:/nexus-data

需要注意的是,nexus挂载的/home/nexus/data目录需要授权,使用chmod 777 /home/nexus/data

13.2登录nexus

yaml 复制代码
- 账号为:admin,密码在/home/nexus/data下

13.3常见的配置

  • 本地仓库配置私服

配置完私服后,如果本地仓库和私服中没有依赖,nexus会先从远程仓库中获取,然后本地再从nexus中获取

13.4上传jar包到nexus

pom文件中加入如下配置

xml 复制代码
<distributionManagement>
    <repository>
        <id>nexus-mine</id>
        <url>http://192.168.126.30:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-mine</id>
        <name>Nexus mine</name>
        <url>http://192.168.126.30:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
  • distributionManagement:这个元素用来配置项目发布的相关信息,特别是将构建结果发布到远程仓库时的目标位置。它通常包含 <repository><snapshotRepository> 子元素,以及其他相关的发布配置
  • repository:这个元素配置了发布正式(发布版本)到远程仓库的仓库信息。正式版本指的是经过正式发布的版本,通常是稳定版本。
    • <id>:仓库的标识符,通常是一个唯一的名字。
    • <url>:远程仓库的 URL,指向发布正式版本的目标仓库。
  • snapshotRepository:这个元素配置了发布快照(snapshot)版本的仓库信息。快照版本通常表示开发中的不稳定版本,可能会频繁更新。
    • <id>:仓库的标识符
    • <name>:仓库的名称,
    • url>:远程仓库的 URL

运行命令

xml 复制代码
mvn deploy

14.忽略测试

xml 复制代码
mvn install -DskipTests
相关推荐
Moe4885 分钟前
Spring AI Advisors:从链式增强到递归顾问
java·后端
敖正炀9 分钟前
ReentrantReadWriteLock、ReentrantLock、synchronized 对比
java
cike_y20 分钟前
Java反序列化漏洞-Shiro721流程分析
java·反序列化·shiro框架
极创信息42 分钟前
信创系统认证服务怎么做?从适配到验收全流程指南
java·大数据·运维·tomcat·健康医疗
格鸰爱童话1 小时前
向AI学习项目技能(六)
java·人工智能·spring boot·python·学习
白宇横流学长1 小时前
停车场管理系统的设计与实现
java
Flittly1 小时前
【SpringAIAlibaba新手村系列】(18)Agent 智能体与今日菜单应用
java·spring boot·agent
木井巳1 小时前
【递归算法】目标和
java·算法·leetcode·决策树·深度优先
亦暖筑序1 小时前
手写 Spring AI Agent:让大模型自主规划任务,ReAct 模式全流程拆解
java·人工智能·spring
敖正炀1 小时前
ReentrantLock 与 synchronized对比
java