其实学会Maven很容易,带你快速了解Maven教程

在开始之前,请先确保你的电脑已经安装了jdk1.7或者以上版本,maven,以及IDEA或者eclipse

推荐教程:

  • JDK安装以及环境变量的配置

  • Maven环境配置以及IDEA使用maven创建项目

文章目录

  • 简介
    • Maven是什么?
    • Maven能做什么?
    • 依赖管理
    • 项目构建
    • 为什么要学Maven
  • Maven工程
    • Maven工程的目录结构
    • Maven概念模型——POM(Project Object Model)
    • POM文件中各个标签的详细介绍
      • modelVersion
      • parent
      • groupId、artifactId、version
      • packaging
      • properties
      • dependencies、dependence
      • exclusions、exclusion
      • scope
      • dependencyManagement
  • Maven仓库
  • Maven常用命令
    • compile
    • test
    • clean
    • package
    • install
  • Maven指令的生命周期
  • Maven项目的依赖
    • 什么是传递依赖
    • 依赖冲突
    • 依赖冲突的解决

简介

Maven是什么?

Maven官网:https://maven.apache.org/

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven能做什么?

依赖管理

在没学习maven之前,如果你学过spring框架或者其他框架的时候,是不是通常得手动复制一大堆jar包到项目中。随着我们项目的不断扩大,模块越来越多,引入的jar也随之增多。这时候管理这些依赖就是一件很让人头疼的时,不同的jar包之间可能存在冲突或者版本之间不匹配等各种各样的问题。

而使用maven的话,我们可以事先将各种jar包放到一个仓库中,当项目中需要中使用的时候,只要通过pom.xml中的做表,到我们事先存放jar包的仓库中找到这些jar包,再用这些jar包去运行即可。

我们也可以通过pom.xml中的坐标去管理各个依赖之间的关系(这个后面会详细提到)。

项目构建

一个项目中,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。

maven可以帮我们管理这一系列过程。通过maven提供的命令就可以轻松搞定。

其实学会Maven很容易,带你快速了解Maven教程_第1张图片

为什么要学Maven

  • 提高开发效率。

  • 现在开源的项目或者很多教程,都会使用到maven,不学的话,很难看懂别人的代码。

Maven工程

Maven工程的目录结构

首先我们先使用idea创建一个maven工程(不知道怎么创建的话可以参考这里Maven环境配置以及IDEA使用maven创建项目)。

创建好后,会得到这么个一个目录

  • pom.xml:maven 项目核心配置文件。

  • src/main目录下就是存放跟我们项目相关的文件

    • src/main/java:存放项目*.java文件。
    • src/main/resources:存放项目的资源文件,例如spring、myabtis等配置文件。
    • src/test/java:存放测试用的*.java文件。
    • src/test/resources:测试资源文件
  • target:项目输出位置,编译好的.class文件会输出到这里

  • 如果是一个javaweb项目,在src/main目录下还会有一个webapp目录,用于放置网页文件等

其实学会Maven很容易,带你快速了解Maven教程_第2张图片

Maven概念模型——POM(Project Object Model)

创建好maven工程后,打开pom文件,一般会出现以下内容。(idea上不同方式创建,多少会有些不同)

其实学会Maven很容易,带你快速了解Maven教程_第3张图片

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

  • 项目对象模型

    一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、

    插件目标等;例如定义自己项目中的一些信息。

    • groupId:项目名称
    • artifactId:模块名称
    • version:版本信息
        <groupId>org.examplegroupId>
        <artifactId>testartifactId>
        <version>1.0-SNAPSHOTversion>
    
  • 依赖管理系统

    通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。

    比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9

    的依赖定义:

        <dependencies>
            
            <dependency>
                
                <groupId>junitgroupId>
                
                <artifactId>junitartifactId>
                
                <version>4.13version>
                
                <scope>testscope>
            dependency>
        dependencies>
    
  • 一个项目生命周期(Project Lifecycle)

    使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期。

  • 插件(plugin)目标(goal)

    maven 管理项目生命周期过程都是基于插件完成的。

POM文件中各个标签的详细介绍

这里记录下常用的标签用法,若有缺漏,欢迎评论区留言,我看到了会及时补上。

可以先看之后的内容,再回过头来看这部分。

modelVersion

描述这个pom文件遵循哪个版本的项目描述符

    <modelVersion>4.0.0modelVersion>

parent

父级依赖,继承哪个pom项目

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.4.2version>
        <relativePath/> 
    parent>

groupId、artifactId、version

  • groupId:项目名称
  • artifactId:模块名称
  • version:版本信息
    <groupId>org.examplegroupId>
    <artifactId>testartifactId>
    <version>1.0-SNAPSHOTversion>

packaging

定义项目的打包方法。可选值有:pom、jar、war、maven-plugin

<packaging>jarpackaging>

properties

在properties可以自定义一些属性值

    <properties>
        <junit.version>4.13junit.version>
    properties>

使用的方法如下

    <properties>
        <junit.version>4.13junit.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit.version}version>
            <scope>testscope>
        dependency>
    dependencies>

dependencies、dependence

  • dependencies:里面包含多个dependence

如果要查询某些依赖作标,可以到这个网站上http://www.mvnrepository.com/

    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13version>
            <scope>testscope>
        dependency>
    dependencies>

exclusions、exclusion

当某个依赖重复导入时,可以用exclusions排除项目中的某个依赖。

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
            <exclusions>
                <exclusion>
                    <groupId>junitgroupId>
                    <artifactId>junitartifactId>
                exclusion>
            exclusions>
        dependency>

scope

依赖范围有四种

  • compile
  • test
  • runtime
  • provided
    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13version>
            <scope>testscope>
        dependency>
    dependencies>

dependencyManagement

在父工程中使用。如果在子工程中没有定义依赖版本,就默认使用父工程这里定义的。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13version>
                <scope>testscope>
            dependency>
        dependencies>
    dependencyManagement>

Maven仓库

maven项目运行的时候会通过pom.xml文件中的依赖作标引入一些依赖jar包,首先会现到本地区寻找,如果有的话,则直接引入,若没有的话,则从远程仓库下载(联网下载),然后保存到本地,之后再使用的话,直接引用本地的就行。

maven仓库分为三类:

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找。默认本地仓库的位置为${user.dir}/.m2/repository,${user.dir}也就是window用户目录。这个可以通过修改maven/conf下的settings.xml文件来设置。
  • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
  • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

Maven常用命令

compile

compile是maven工程的编译命令。可以把src/main/java中的java文件编译成class文件输出到targe目录下。使用方法如下图

其实学会Maven很容易,带你快速了解Maven教程_第4张图片

在这里插入图片描述

test

test是maven工程的测试命令,会执行src/test/java下的单元测试类。

使用方法如下。

其实学会Maven很容易,带你快速了解Maven教程_第5张图片

clean

clean是maven工程的清除命令,执行后会删除targe目录

其实学会Maven很容易,带你快速了解Maven教程_第6张图片

package

package是maven工程的打包命令,根据\的内容打包成jar包或者war包。

mvn package

install

install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

mvn install

Maven指令的生命周期

maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,

这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

maven指令有以下这些,当执行某个指令后,会把它之前的指令也执行一次。例如执行test指令的话,也会执行clean、compile。

其实学会Maven很容易,带你快速了解Maven教程_第7张图片

Maven项目的依赖

什么是传递依赖

现在项目中加入父标签

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.4.2version>
        <relativePath/> 
    parent>

然后加入spring-boot-starter-web坐标

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>

然后使用idea的工具来查看下项目的依赖结构

会发现除了引入的spring-boot-starter-web之外,还有其他jar包存在。因为我们项目依赖了spring-boot-starter-web,而spring-boot-starter-web也以来了tomcatspring-webmvc等。所以它们也出现在了我们项目中。这就是传递依赖。

其实学会Maven很容易,带你快速了解Maven教程_第8张图片

依赖冲突

依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。

依赖冲突的解决

因为依赖传递等原因把某一个jar包的不同版本都引入到了项目中。我们可以选择保留某一版本的依赖。使用把依赖排除掉

到此,本文就此结束。希望能帮助你快速了解并使用maven。

拒绝白嫖,从点一键三连做起。

你可能感兴趣的:(Java,maven,java)