Maven基础篇

Maven是一个项目管理工具,用于自动化构建、依赖管理和项目结构统一。它通过项目对象模型(POM)来描述项目,并通过坐标(包括groupId、artifactId、version等)定位资源。文章详细介绍了Maven的下载安装、基础概念如仓库和坐标,以及如何在IDEA中创建Maven项目。此外,还讨论了依赖管理,包括依赖传递、冲突解决和范围,以及生命周期和插件的使用。
摘要由CSDN通过智能技术生成

Maven

简介

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM:Project Object Model 项目对象模型)

在这里插入图片描述

作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一的开发结构:提供统一的、标准的项目结构

下载安装Maven

官方下载地址:https://maven.apache.org/download.cgi

进入网站后,下载如下两个文件
在这里插入图片描述
下载完成后,将第二个解压至个人的工作目录,便于后续管理。

解压完成后,进入文件夹会看到以下内容:
在这里插入图片描述
接下来,跟配置JAVA_HOME一样,配置MAVEN_HOME
在这里插入图片描述
然后,配置Path
在这里插入图片描述
配置完成后,按住Win+R键输入cmd,在命令提示符内输入mvn,若出现以下界面则证明maven已经配置成功
在这里插入图片描述


Maven基础概念

仓库

仓库:用于存放资源,包含各种jar包

分类:

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源的仓库
    • 中央仓库:Maven团队维护,存储所有资源的仓库(不能存储具有版权的资源)
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服的作用:

  1. 保护具有版权的资源,包含购买或者自主研发的jar包
  2. 一定范围内共享资源,仅对内保护开放,不对外共享

坐标

Maven中坐标用于描述仓库中资源的位置

https://repo1.maven.org/maven2/

https://mvnrepository.com/

坐标主要组成

groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)

artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)

version:定义当前项目版本号

packaging:定义该项目的打包方式

作用

使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载交由机器完成

配置

maven的默认文件在C盘用户文件夹中的.m2文件夹中,随着后续使用,其占用内存便越来越大,所以要将其文件存储的默认位置换至其他盘符下

点击进入下载的maven文件包的conf下,打开settings.xml
在这里插入图片描述
maven默认下载网址为国外地址,下载速度较慢,因此要配置下载镜像,可以提高下载速度
在这里插入图片描述

第一个Maven程序

用IDEA创建Maven(原生)

第一步

右击文件,新建一个空的项目
在这里插入图片描述
在这里插入图片描述

第二步

右键文件,打开设置
在这里插入图片描述
在左上角的搜索栏中直接搜索maven
在这里插入图片描述

第三步

找到项目结构,创建maven项目(这里也可以在文件中找到)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建完成后,是这样的
在这里插入图片描述
此时test还少了一个resources目录,这里可以手动添加一下
在这里插入图片描述
在这里插入图片描述
创建完成后,点击工具栏上的Maven
在这里插入图片描述
等待下载完成后,在pom.xml中写入如下代码,导入测试包

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>RELEASE</version>
        <scope>test</scope>
    </dependency>
</dependencies>

然后再次点击工具栏中的Maven,重新加载Maven项目
在这里插入图片描述
一切就绪后,maven便配置完成了,可以开始愉快的敲代码了~


此时,编写了两个测试代码。
在这里插入图片描述
应该怎么运行呢?
点击工具栏中的Maven,再点击生命周期,可以看到一系列操作,要使用对应功能,双击即可
在这里插入图片描述

上图列出的是常用的功能:

功能名作用
compile将java源文件编译成class文件
test执行test目录下的测试用例
package将项目打包成jar包
clean删除target文件夹
install将当前项目放到Maven的本地仓库中,供其他项目使用

如果嫌当前使用方法过于不习惯,可以将这些功能放到运行/调试配置中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如此以来,便又回到了Java运行风格,也方便后续调试~

用IDEA创建Maven(模板)

原生创建的Maven貌似有些东西不全,所以也可以采用IDEA内置模板创建一个Maven

第一步

在原生的基础上添加一个新模块
在这里插入图片描述
在这里插入图片描述

创建一个web工程Maven,其pom.xml配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--指定pom的模型版本-->
  <modelVersion>4.0.0</modelVersion>
    <!--组织id-->
  <groupId>org.example</groupId>
	<!--项目id-->
  <artifactId>Web</artifactId>
    <!--打包方式,web工程打包为war,java工程打包为jar-->
  <packaging>war</packaging>
<!--    版本号-->
  <version>1.0-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
  <dependencies>
<!--      具体依赖-->
    <dependency>
        <!--依赖所属群组id-->
      <groupId>junit</groupId>
        <!--依赖所属项目id-->
      <artifactId>junit</artifactId>
        <!--依赖版本号-->
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
<!--  构建-->
  <build>
<!--    设置插件-->
    <plugins>
<!--      具体的插件-->
      <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
        <configuration>
            <port>8080</port>
            <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

其中配置了Tomcat7,方便后续web开发使用

依赖管理

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
    在这里插入图片描述

可选依赖

是指对外隐藏当前所依赖的资源(使资源不透明化)

在pom.xml中需要隐藏的依赖中添加一行代码即可实现,这里用junit为例

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <optional>true</optional>
  </dependency>

排除依赖

指主动断开依赖的资源,被排除的资源无需指定版本

同样的,在pom.xml中在需要排除依赖中添加代码即可实现

<exclusions>
      <exclusion>
          <groupId>需要排除依赖的群组id</groupId>
          <artifactId>需要排除依赖的项目id</artifactId>
      </exclusion>
  </exclusions>

注:这里不需要依赖的版本号

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围内有效(test文件夹范围内)
  • 依赖是否参与打包(package指令范围内)
scope主代码测试代码打包范例(jar包)
compile(默认)能(使用)log4j
test不能不能junit
provided不能servlet-api
runtime不能不能jdbc

依赖范围的传递性

带有依赖范围的资源进行传递时,作用范围将受到影响(了解即可,开发中以实际情况而定)

间接依赖/直接依赖compiletestprovidedruntime
compilecompiletestprovidedruntime
test
provided
runtimeruntimetestprovidedruntime

生命周期

生命周期就是指一个对象的生老病死。 生命周期(Life Cycle)的概念应用很广泛,特别是在政治、经济、环境、技术、社会等诸多领域经常出现。

项目构建生命周期

Maven对项目构建的生命周期划分为3套:

  1. clean:清理工作
  2. default:核心工作,如:编译,测试,打包,部署等
  3. site:产生报告,发布站点等

clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

default构建生命周期

  • validate(校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化):初始化构建状态,比如设置属性值。
  • generate-sources(生成源代码):生成包含在编译阶段中的任何源代码。
  • process-sources(处理源代码):处理源代码,比如说,过涉任意值。
  • generate-resources(生成资源文件):生成将会包含在项目包中的资源文件。
  • process-resources(处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备,
  • compile(编译):编译项目的源代码。
  • process-classes(处理类文件):处理偏译生成的文件,比如说对Java class文件做字节码改善优化。
  • generate-test-sources(生成测试类源代码):生成包含在编译阶段中的任何测试源代码。
  • process-test-sources(处理测试源代码):处理测式源代码,比如说,过滤任意值。
  • generate-test-resources(生成测试资源文件):为测试创建资源文件。
  • process-test-resources(处理测试资源文件):复制和处理测试资源到目标目录。
  • test-comile(编译测试源码):编译测试源代码到测试目标目录。
  • process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
  • test(测试):使用合适的单元测试框架运行测试(luint是其中之一-)。
  • prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做佳备。
  • package(打包):将编译后的代码打包成可分发格式的文件,比如JAR WAR或者EAR文件,
  • pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,措建需要的环境。
  • integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
  • post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  • verify(验证):运行任意的检查来验证项目包有效且达到质量标准。
  • install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  • deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享,

注:生命周期是从上到下依次运行

site构建生命周期

- pre-site:执行一些需要在生成站点文档之前完成的工作。 - site:生成项目的站点文档。 - post-site:执行些需要在生成站点文档之后完成的工作,并且为部署做准备。 - site-deploy:将生成的站点文档部署到特定的服务器上。

插件

● 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能

● 默认maven在各个生命周期上绑定有预设的功能

● 通过插件可以自定义其他功能

pom.xml配置模板(以source.jar插件为例:将资源打印成jar包):

<build>
<plugins>
  <plugin>
      <groupId>插件的群组id</groupId>
      <artifactId>插件的项目id</artifactId>
      <version>插件版本</version>
      <!--插件执行配置-->
    <executions>
      <execution>
        <goals>
          <goal>执行结果</goal>
        </goals>
          <!--生命周期的阶段-->
          <!--当程序执行到generate-test-resources时,就会执行此插件-->
        <phase>generate-test-resources</phase>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>

每个插件的功能不同,所以配置和用法也不同,这里只是举例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值