一、为什么要使用maven?

团队项目开发过程中,需要依赖很多开源或者自己实现的 jar 包,如果其他项目需要使用本项目周种的 jar 包,只能 copy,只有个别项目的话,使用copy 还好,可以解决问题,但是如果项目数量很多的话,copy 将会费时费力,这个时候 maven 就出现了。

什么是maven

 Maven是一个项目管理工具。它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
                                                                            ---《百度百科》
 maven:本质上是一个软件,用来管理项目的。

maven 的作用

  1. 项目构建管理: maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。
  2. 管理依赖(jar包): maven能够帮我们统一管理项目开发中需要的jar包;
  3. 管理插件: maven能够帮我们统一管理项目开发过程中需要的插件;

二、maven 下载安装

1.下载

官方网站:http://maven.apache.org/
下载页面:http://maven.apache.org/download.cgi

2.安装

maven安装包下载完成后是一个压缩文件,如下图所示:

我们需要将压缩包解压到一个没有中文,空格或其他特殊字符的文件夹内即可使用:

目录名

功能说明

bin

二进制的可执行文件,如:mvn.cmd是maven的核心可执行文件

boot

第三方类加载器插件,类似于ClassLoader

conf

配置文件夹,其中的settings.xml是用于配置本地仓库的

lib

maven自身运行所需要的jar包

3.配置

配置JAVA_HOME

        3版本的maven软件依赖1.7或以上版本的JDK,所以安装maven之前需要确认jdk的版本和JAVA_HOME是否正确配置:

注意:JAVA_HOME路径需要设置成bin目录的上一级目录

配置MAVEN_HOME

            按照上面JAVA_HOME的配置方式,将maven的安装目录配置到环境变量中。MAVEN_HOME=maven压缩包解压目录,就是bin的上一级目录。

第一步:新增环境变量:MAVEN_HOME

第二步:在path环境变量中添加:%MAVEN_HOME%\bin

第三步:测试:在cmd控制台中输入命令: mvn -version ;如果出现以下maven的版本信息,则说明maven的安装与环境变量的配置均正确;

说明:出现如上信息说明maven安装和配置环境变量都成功。

三、maven 仓库介绍

仓库就是一个目录(文件夹),这个目录被用来存储我们项目的所有依赖(就是jar包)和插件。

仓库包括两类仓库:

  1. 本地仓库
  2. 远程仓库

    远程仓库又包括两类:

  1. 中央仓库
  2. 私服

配置本地仓库

本地仓库的位置是通过maven的核心配置文件(settings.xml)来配置的。settings.xml文件位于maven安装目录:apache-maven-3.3.9\conf\settings.xml 。

打开settings.xml文件:

发现本地仓库默认的地址为当前用户的/.m2/repository目录。

一般情况下,我们需要自己重新设置本地仓库的地址,设置方法如下:

  1. 第一步:在maven的安装目录下创建一个repository文件夹(一般习惯将仓库地址和maven安装目录放置在一起)

  2. 第二步:在核心配置文件setting.xml中,将仓库存放的位置设置成:D:\MySoft\maven\apache-maven-3.3.9\repository(以自己的安装路径为准);

远程仓库配置

远程仓库又包括两类:

  1. 中央仓库
  2. 私服

中央仓库

中央仓库默认是apache提供的,位于国外。(中央仓库的地址:http://mvnrepository.com/)

配置私服

私服是可以架设在局域网的一种特殊的远程仓库,目的是代理中央仓库来部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库(中央仓库),将构件下载到私服,再提供给本地仓库下载。

我们到公司,公司都会有自己的私服。其实私服就是一个服务器。我们的maven项目到私服服务器上去下载jar包到本地仓库供maven项目使用。

打开settins.xml文件,找到标签节点,在这个标签中添加以下配置信息

【阿里云私服】--连外网时使用

<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

注:  千万注意, 只可配置一个(另一个要注释!)   不然两个可能发生冲突 ,导致jar包下不下来 !!!!!!!

四、maven 工程

在创建maven工程之前一定要保证上述的仓库都是配置成功了,否则无法创建maven项目,因为创建maven项目都要到仓库中去下载插件。那么上面我们已经配置好maven仓库了,接下来我们就要创建maven工程了。

1、IDEA配置本地maven

idea 自行去Download IntelliJ IDEA 下载,这里不多做介绍,学生可以去申请教育版,然后根据引导安装即可。

因为idea和maven是没有直接关系的。所以使用idea创建maven工程之前需要将本地的maven配置到idea环境中,这样才可以在idea中创建maven工程。配置方法如下:

1.1 配置本地maven
  1. 第一步:关闭当前工程,回到idea主界面找到customize-----All settings:
  2. 第二步:配置maven_home和settings.xml的路径:

    在搜索框里搜索maven,然后按照下面操作即可。

1.2 配置maven参数

使用idea创建maven项目后,默认会去网络中的中央仓库中下载一些配置资源,那么会很慢,这里需要设置下,那么就不会到中央仓库去下载了一些资源,而是到本地仓库下载。需要设置参数archetypeCatalog。设置方法如下:将

-DarchetypeCatalog=internal 设置到Maven--Runner--VM Options中。

2、创建maven的java工程

使用maven创建的项目可分为3种类型:

1)普通maven项目,就是普通的javase项目--》java project,项目打成jar包运行

2)maven的web项目,项目打成war包运行

3)maven的pom项目,也称为maven的聚合项目

2.1 创建步骤
  1. 第一步:File--New--Project
  2. 第二步:新版项目这里就是 maven的
  3. 填写项目的坐标信息

  4. 指定项目名称和路径

  • GroupID是项目组织唯一的标识符, 比如我的项目组叫nekkoi30  那么GroupID应该是 com.nekkoi.sh.nekkoi30   域名.项目组名
  • ArtifactID就是项目的唯一的标识符,表示项目名。 一般是 xxx-xxx   比如maven-java 
  • version:项目版本号 第一次就是1.0.0  第二次比较多的修改 2.0.0  第三次小的修改 2.1.0 第四次修改很小的bug2.1.1 ....
2.2 java工程介绍

说明:

1).idea和maven-java1.iml只要在idea中创建工程都会存在的,idea生成的,不用关心

2)pom.xml是maven的核心配置文件,我们会在这个配置文件配置依赖。下面会讲解

3)main:主代码,在实际开发中是项目上线运行的

a:java:存放java代码的

b:resources:存放配置文件的。例如存放mybatis、数据库连接池的配置文件。这个目录只能存放配置文件。

4)test:存放测试的代码,项目上线之前先进行测试,然后在上线。

a:java:存放编写java的测试的代码,例如junit测试

默认存在了示例代码,直接运行,发现以下输出,项目没有问题

五、maven 项目构建的生命周期

1、maven项目构建的生命周期

1.1 生命周期是什么

在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间,项目和项目间,往往使用不同的方式做类似的工作。

Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作,在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

1.2 maven的三套生命周期

maven拥有三套相互独立的生命周期,分别是clean,default和site。clean 生命周期的目的是清理项目default 生命周期的作用是构建项目site 生命周期的目的是构建项目站点

maven的生命周期都对应着具体的命令如下:

clean生命周期

clean生命周期的目的是清理项目,它包含三个阶段:

  1. pre-clean 执行一些清理前需要完成的工作;
  2. clean 清理上一次构建生成的文件;
  3. post-clean 执行一些清理后需要完成的工作;
default生命周期

default生命周期定义了真正构建项目需要执行的所有步骤,它是所有生命周期中最核心的部分。其中的重要阶段如下:

  1. compile :编译项目的源码,一般来说编译的是src/main/java目录下的java文件至项目输出的主classpath目录中;
  2. test :使用单元测试框架运行测试,测试代码不会被打包或部署;
  3. package :接收编译好的代码,打包成可以发布的格式,如jar和war;
  4. install: 将包安装到本地仓库,供其他maven项目使用;
  5. deploy :将最终的包复制到远程仓库,供其他开发人员或maven项目使用;
site生命周期

site生命周期的目的是建立和发布项目站点,maven能够基于pom文件所包含的项目信息,自动生成一个友好站点,方便团队交流和发布项目信息。

2、maven生命周期相关命令

我们使用以下命令可以完成maven生命周期,演示生命周期的命令必须在pom.xml所在的目录下打开dos窗口然后输入如下命令进行演示。

找到pom.xml文件位置并打开dos窗口

mvn clean:调用clean生命周期的clean阶段,清理上一次构建项目生成的文件;
mvn compile :编译src/main/java中的java代码;
mvn test :编译并运行了test中内容 ;
mvn package:将项目打包成可发布的文件,如jar或者war包; 
mvn install :发布项目到本地仓库 ;
2.1、mvn clean

clean命令的作用是清理项目编译或打包后生成的文件,具体对应maven项目中的target目录;

需求:清理存储上一次构建项目生成的文件target.

2.2、mvn compile

compile命令的作用是编译src/main/java中的java代码编译成可直接运行的class文件。编译完成后maven项目会自动创建一个target目录来存储这些文件。

2.3、mvn test

test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。注意:只能运行junit测试代码。 并且使用test运行的测试类的类名必须以Test结尾,否则不会运行,不会看到结果。

在test/java目录下创建一个测试类,书写测试方法,代码如下:

import org.junit.Test;

public class MavenTest {
    @Test
    public void show() {
        System.out.print("maven test show");
    }
}

然后输入 mvn test

注意:

1.test命令只能运行test目录下的junit包下的类

2.test命令也可以运行多个测试方法

2.4、 mvn package

package命令是将项目打包成可以发布的包。maven项目常见的打包方式有两种:

1)maven的java project会打成jar包。

2)maven的web project会打成war包。

打包完成后将生成的文件存放在target目录中。

注意:每次打包前还会再次执行所有test命令

2.5、 mvn install

install命令是将当前的项目打包并发布到本地仓库中,供本地的其他maven项目使用。项目发布的路径:本地仓库路径/groupId/artifactId/

注意:每次安装前还会再次执行所有test命令

2.6、mvn tomcat:run

tomcat:run表示部署项目,项目上线运行。能够部署项目都是web项目。这里启动tomcat并不是使用idea中的tomcat,而是maven自带的。

但是我们目前的项目并不是 web 项目,所以这个命令测试不了,后续再介绍 web 项目

3、maven生命周期相关插件

maven的核心包只有几兆大小,核心包中仅仅定义了抽象的生命周期。生命周期的各个阶段都是由插件完成的,它会在需要的时候下载并使用插件,例如我们在执行mvn compile命令时实际是在调用maven的compile插件来编译java源码。

我们使用IDEA创建maven项目后,就不需要再手动输入maven的命令来构建maven的生命周期了。IDEA给每个maven构建项目生命周期各个阶段都提供了图形化界面的操作方式。具体操作如下:

3.1 打开maven视图

依次打开:View--》Tool Windows--》Maven

打开IDEA编辑区右侧:Maven Projects会弹出如下窗口,打开窗口中的Lifecycle即可看到相关命令。

3.2 执行命令

双击Lifecycle下的相关命令图标即可执行对应的命令。或者点击运行按钮:

六、maven应用详解

maven是一个项目管理工具,其中依靠于一个很重要的xml文件:pom.xml。我们接下来学习下pom.xml文件的配置。

1、pom配置详解

pom(Project Object Model)指的是项目对象模型,用来描述当前的maven项目。使用pom.xml文件来实现。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.nekkoi.test</groupId>
    <artifactId>maven-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>26</maven.compiler.source>
        <maven.compiler.target>26</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

【pom文件详解】

1. <project> :pom文件的根标签,表示当前maven项目;
2. <modelVersion>: 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0;
3. 坐标:定位项目在本地仓库中的位置,下面三个标签组成一个坐标。
    1)<groupId>:maven项目组织id标识符,一般是公司域名倒过来写<groupId>com.heima.maven</groupId>
	2)<artifactId>:项目的标识符--项目名。<artifactId>maven-web2</artifactId>
	3) <version>:项目的版本号;<version>1.0-SNAPSHOT</version>
4. <packaging>:maven项目的打包方式一般配置jar或者war;

2、依赖管理

Maven的作用:1.构建项目(maven项目在任何一个开发工具中结构都是一样的)及项目的生命周期;2.依赖管理;3.插件管理;

Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们之前说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能在其它项目中进行依赖引用。

2.1 Maven坐标

坐标的定义元素如下:

  1. groupId:定义当前项目(jar包)隶属的实际项目组。
  2. artifactId:定义当前项目(jar包)的名称;
  3. version:定义当前项目(jar包)的版本号;

通过上面三个参数我们就能够确定一个唯一版本号的jar包。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.2.RELEASE</version>
</dependency>
2.2 依赖导入
1、使用IDEA工具导入:

IDEA中给我们提供了一种搜索jar包的方式,帮助我们快速导入jar包。使用方法如下:

  1. 第一步:在pom.xml文件中书写dependencies标签,鼠标光标移入到dependencies标签中,按Alt+Insert键。会弹出一个选择框:
  2. 选择Dependency后会弹出一个搜索框:输入要添加的jar包的名字

注意:在idea中还可以直接输入要使用的包。

2、从远程仓库中获取坐标:

如果我们导入的依赖本地仓库中没有,使用IDEA搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到pom文件中。添加完成之后,maven会帮我们从私服或中央仓库中下载该依赖。

搜索依赖坐标的方法:

1.从私服中获取,联网的情况下可以使用阿里云私服。

阿里云私服地址:

http://maven.aliyun.com/nexus/content/groups/public

1).这里访问阿里云私服

阿里云首页:https://maven.aliyun.com

2).复制上述的依赖到pom.xml文件中。

如果私服中也没有找到那么就只能到中央仓库中查找了。

2.在中央仓库中查找:

网址:http://mvnrepository.com/

将以下坐标复制到pom文件中即可:

pom文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的External Librarites中出现刚引入的依赖,则说明依赖引入成功。

有这些知识已经可以初步使用 maven 了,其他知识后续再介绍吧

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐