Maven基础及进阶学习笔记

Maven基础及进阶笔记

学习视频来源:学习视频

一、maven基础

maven的两大基础功能

  1. 依赖管理
  • 基于POM【项目对象模型】通过仓库以坐标的形式来管理
  1. 项目构建
  • 一个项目开发完成,需经历以下步骤
    清理–>编译–>测试–>打包–>安装–>部署
  • maven对于项目构建提供了插件机制,每个构建的过程都只需要一个命令就可以完成

maven安装

1、下载解压maven的压缩包
2、配置本地仓库路径
3、配置环境变量 MAVEN_HOME PATH
4、配置阿里云镜像
5、配置maven jdk编译版本
6、命令行执行mvn -v 可以查看版本即可

仓库
本地:电脑上的一个文件夹
远程:公司私服,不对外开放
中央:maven团队维护,对外开放

maven下载jar流程:
1、根据pom中的依赖,先从本地仓库找,如果找到则直接使用
2、如果找不到,就看配置私服没有
3、配置了私服时,私服有就下载,私服上没有则去中央仓库下载到私服,没配置私服就直接去中央仓库找
4、中央仓库中查找失败,则会在本地仓库中留下错误jar包信息
在这里插入图片描述

maven的打包方式

  1. jar:打成jar包,可以安装到本地仓库或者被其他应用以坐标的形式去使用(不写打包方式,默认打jar包)
  2. war:打成war包,使用tomcat插件来部署运行war包,可以在浏览器中访问
  3. pom:达成pom(直接就是一个pom.xml文件),表示当前工程是个父工程,可以被子工程继承,也可以管理子工程,父工程的打包方式必须是pom

maven文件目录

在这里插入图片描述
注意事项:
1.普通打jar的工程,建议用idea生成maven工程是不要选择构建,直接生成最简单的maven目录(学习阶段最好从简单开始学起,配置都自己来配)
2. 打成war包的工程,可以将打jar包的pom打包方式修改成war,在main目录下另增加webapp\WEB-INF\web.xml即可

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

nexus私服的安装与配置(windows,sun jdk1.8)

  1. 下载安装包:nexus-2.14.14-01-bundle.zip
    下载链接:7jgk
  2. 解压该安装包,并在解压bin文件夹路径下,用管理员权限打开cmd
  3. 执行命令 nexus install
    此时可在windows服务中看到
    在这里插入图片描述
  4. 修改nexus的运行端口(非必要操作,按需修改,配置文件路径nexus-2.14.14-01\conf\nexus.properties)
    在这里插入图片描述
  5. 在bin目录下执行nexus start
    ps:如果运行失败可能是nexus缺少必要jar包(jaxb-api-2.3.0.jar,javax.activation-api-1.2.0.jar),jar包下载链接:7jgk
    将这两个jar放在nexus-2.14.14-01\lib目录下,重新执行nexus start即可

6.访问nexus
安装到本机直接访问:http://localhost:8018/nexus/#welcome
登录默认用户名及密码为:admin,admin123
在这里插入图片描述

nexus私服面板介绍

在这里插入图片描述
在这里插入图片描述
注意事项:
快照版本上传到私服的命名格式:在版本号中体现为有关键字:SNAPSHOT或者带有时间戳,例如:1.0-SNAPSHOT或者1.0-20220723.115808-1.jar,版本号-8位日期.6位时间-快照下标(这个版本快照已经发了多少次)

  1. 如果在版本号中含有关键字SNAPSHOT,则Maven会自动打上时间戳和快照下标
  2. 有了时间戳,Maven就可以提供最新的快照进行下载
  3. 而对于本地的POM.xml文件的依赖版本号一直可以不变,比如1.0-SNAPSHOT,Maven始终会帮你下载到最新的版本
    在这里插入图片描述

maven配置私服,私服的上传下载

实践idea项目的下载链接:7jgk
1、先在maven的settings.xml配置文件中配置子标签

<server>
      <id>local-nexus</id>  <!--nexus认证id-->
      <username>admin</username>
      <password>admin123</password>
</server>

2、在先在maven的settings.xml配置文件中配置子标签

<profile>
	<id>nexus</id>
	<repositories>
        <repository>
          <id>local-nexus</id><!-- 此处的id要与server中的一致  nexus-public-->
          <name>nexus-public-repo</name><!-- 名字随意-->
		  <!-- 对应nexus中仓库的地址-->
          <url>http://localhost:8018/nexus/content/groups/public/</url>
          <releases>   
          <enabled>true</enabled>   
        </releases>   
        <!--是否下载snapshots构件-->
        <snapshots>   
          <enabled>true</enabled>   
        </snapshots>   

        </repository>
      </repositories>
	
	</profile>
	```
3、在先在maven的settings.xml配置文件中配置<activeProfiles>标签,
```xml
<activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

4、在maven项目的pom.xml中添加发布版本以及快照版本的上传地址

<distributionManagement>
        <repository>
            <id>local-nexus</id><!--nexus认证id-->
            <url>http://localhost:8018/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>local-nexus</id>
            <url>http://localhost:8018/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

5、编写代码,最后执行maven的deploy命令测试私服的上传以及下载(此处使用idea执行)
在这里插入图片描述

二、maven进阶

maven开发思想

约定>配置>编码
约定:开发需要遵循某些特定的规则,如果不遵循,就会出现一些没法解释的问题
配置:开发把使用代码完成的工作,用配置的形式来规范化,这些配置都是模板化的
编码:需要人为编写的业务代码

maven基于依赖管理的特性

1. 依赖传递

  • 项目中要使用spring-ioc的相关依赖
  • 只需要导入spring-context依赖即可
  • 因为maven会去判断当前依赖spring-context要正常使用,必须要有相关依赖的支持,就会自动导入相关依赖
    直接依赖:手动导入的依赖
    间接依赖:通过依赖传递特性传递进来的依赖

2.依赖冲突

举例:
项目中引用了A依赖,B依赖:
A依赖由于依赖传递,需要引用C依赖的支持【C-1.0】
B依赖由于依赖传递,需要引用C依赖的支持【C-1.1】

此时,因为C依赖版本不同,导致项目中不知道具体使用哪个版本,就认为产生了冲突(冲突情形之一)。
冲突可能导致项目无法编译。

此时idea工程中具体用的那个依赖,可查看项目的External Libraries【外部库】
在这里插入图片描述
冲突解决:

  • 第一声明优先原则(maven会使用该方式解决冲突)
    在pom.xml中,依赖书写位置靠上的,优先生效
  • 路径近者优先
    直接依赖优先于间接依赖
    间接依赖之间,层级靠前者优先
  • 版本锁定+直接排除法
    项目可能使用到几十甚至几百个依赖,一般不可能把依赖都通过直接导入的方式写入pom.xml中,那么依赖冲突就没有办法完全解决
  1. 直接排除法
			<exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
  1. 版本锁定
    properties标签用来定义依赖的版本
    dependencyManagement标签用来锁定依赖的版本,此标签只用来锁定版本,不表示引用实际依赖,锁定功能一般是父工程完成的
    dependencies标签用来导入依赖【无需指定依赖版本】
<properties>
    <junit-verison>4.12</junit-verison>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-verison}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
<dependencies>
    <!--单元测试jar-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
<dependencies>

maven继承

  • 概述:项目与项目之间的继承
  • 两个概念和要求:
    父工程:打包方式必须是pom
    子工程【子模块】:也可以作为父工程存在

父工程的作用:
集中管理依赖:一般定义子模块共有的依赖
聚合:统一对子模块进行操作

如何继承:
在子模块中使用parent标签来指定父工程的GAV坐标接即可,一旦继承,子工程就会具有父工程的依赖
如工程存在问题,需要检查以下两处
1、父模块是否引用该标签

<dependencyManagement>
</dependencyManagement>

2、子模块是否继承父魔块

<parent>
        <artifactId>mybatisdemo</artifactId>
        <groupId>net.togogo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

确认三处后重新reimport,或者尝试在父模块中引用

maven聚合

  • 是父工程的作用,用来统一操作子模块
  • 继承与聚合不是一定要一起使用的

父工程聚合子模块需在pom.xml中添加

<modules>
    <module>firstdemo</module>
  </modules>

聚合后,对父工程的操作(clean complie等),对其子工程也生效,一般有聚合后就会尽量少的写任务,只留一个pom.xml

maven拆分

  • 把一个完整的项目按需拆分成独立的子模块,以不同的打包方式来表示当前小模块。
  • 然后用父工程聚合功能把这些拆分出来的小模块合成一起,变成一个完整的项目
  • 如果这些小模块在其他项目中使用,可以直接以GAV的形式从仓库中获取,提供模块可重用性,减少冗杂代码
    在这里插入图片描述
    拆分方式
  • 小项目:按层
  • 大项目:按业务拆分,类似后续要学习的微服务,每个小模块提供不同的功能(服务),因为功能很小很细,所以又叫“微服务”

三、maven使用小tips

  1. 在父项目下执行deploy时,会把整个项目所有子模块都deploy到私服,包括web模块。在deploy后加 -N可以解决
    -N 的解释:不会递归到子项目里执行当前命令
mvn deploy -Dmaven.test.skip=true -N

参考资料:https://blog.csdn.net/chenxuegui1234/article/details/103577426

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值