> 文档中心 > 【Maven教程】-Maven基础篇(概念、思考、安装)

【Maven教程】-Maven基础篇(概念、思考、安装)

Maven教程-Maven基础篇之Maven实战入门2020年

  • 第一章 Maven简介
    • 1.1 软件是一个工程
    • 1.2 传统项目开发存在的问题
    • 1.3 Maven概述
    • 1.4 Maven核心概念
    • 1.5 安装Maven环境
  • 第二章 Maven核心概念
    • 2.1 Maven工程的目录结构
    • 2.2 pom文件
    • 2.3 仓库
    • 2.4 Maven的生命周期
    • 2.5 Maven的常用命令
    • 2.6 插件
  • 第三章 Maven在IDEA中的应用
    • 3.1 IDEA集成Maven

第一章 Maven简介

官网:http://maven.apache.org/

1.1 软件是一个工程

为了能够实现软件的流水线式生产,在设计和构建软件的时候能够有一种规范和工程化的方法,人们便提出了软件工程的概念。
完成一个Java项目需要:
1.一部分

  • 1.分析项目要做什么,有哪些组成部分
  • 2.设计项目,通过哪些步骤,使用哪些技术,需要多少人,多长时间
  • 3.组件团队,招人,购置设备,服务器,软件,笔记本
  • 4.开发人员写代码。测试代码(重复多次的工作)
  • 5.测试人员,测试项目功能是否符合要求。
  • 测试开发人员提交代码 - 如果测试有问题 – 需要开发人员修改,再提交代码给测试
  • 测试人员再测试代码 - 如果还有问题 - 再交给开发人员 - 开发人员再提交 - 测试直到测试代码通过。

1.2 传统项目开发存在的问题

2.传统开发项目的问题,没有使用maven 管理的项目

1)很多模块,模块之间有关系,手工管理关系,比较繁琐。
2)需要很多第三方功能,需要很多jar文件,需要手工从网络中获取各个jar包
3)需要管理jar包的版本,你需要的是mysql 5.1.5.jar 拿你不能给一个mysql.4.0.jar
4)管理jar文件之间的依赖,你的项目要使用a.jar,需要使用b.jar里面的类
必须首先获取b.jar才可以,然后才能使用a.jar。
a.jar需要b.jar这个关系叫做依赖,或者你的项目中需要使用mysql的驱动,也可以叫做项目依赖mysql驱动。
a.class使用b.class,a依赖b类

3.需要改进项目的开发和管理,需要maven

1)maven可以管理jar文件,
2)可以自动下载jar和它的文档,源代码
3)管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar
4)管理你需要的jar版本
5)帮你编译程序,把java编译为class
6)帮你测试你的你的代码是否正确
7)帮你打包文件,形成jar文件或者是war文件
8)帮你部署项目

1.3 Maven概述

4.构建、项目的构建。
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
maven支持的构建包括有:
1.清理,吧之前项目编译的东西删除掉,为新的编译代码做准备。
2.编译,把程序源代码编译为执行代码,java-class文件
批量的,maven可以同时把成千上百的文件编译为class
javac不一样,javac一次编译一个文件。
3.测试:maven可以执行测试程序代码,验证你的功能是都正确。
批量的,maven可以同时执行多个测试代码,同时测试很多功能。
4.报告,生成的测试结果的文件,测试通过没有。
5.打包,把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。
这个压缩文件就是项目的结果文件,通常java程序压缩文件是jar扩展名的。对于web应用, 压缩文件扩展名是.war。
6.安装,把5中生成的文件jar,war安装到本地仓库
7.部署,把程序安装好可以执行

1.4 Maven核心概念

5.maven的核心概念
1)POM:一个文件 名称是pom.xml,pom翻译过来叫做项目对象模型。
maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
2)约定的目录结构:maven项目的目录和文件的位置都是规定的。
3)坐标:是一个唯一的字符串,用来表示资源的。
4)依赖管理:管理你的项目可以使用jar文件
5)仓库管理(了解):你的资源存放的位置
6)生命周期(了解):maven工具构建项目的过程
7)插件和目标(了解):执行maven构建的时候用的工具是插件
8)继承
9)聚合

1.5 安装Maven环境

maven的使用是先难后易的,难是说:我们是用maven的命令来完成maven的使用的,在idea中直接使用maven,代替命令。
6.maven工具的安装和配置
1)从maven官网来下载maven的安装包
官网:http://maven.apache.org/
2)解压安装包,解压到一个目录,非中文目录。
子目录bin:执行程序,主要是mvn,cmd
conf:maven工具本身的配置文件settings.xml
3) 配置环境变量
在系统的环境变量中,指定一个M2_HOME的名称,指定它的值是maven的安装目录,bin之前的目录
M2_HOME = D:\app包\SSM\maven\apache-maven-3.8.1-bin\apache-maven-3.8.1
再把M2_HOME加入到path中,在所有路径之前加入%M2_HOME%\bin;
4)验证:新的命令行中,执行mvn -v
注意:需要配置JAVA_HOME,指定jdk路径

C:\Users\13931>mvn -v出现如下内容,maven配置正确。Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)Maven home: D:\app包\SSM\maven\apache-maven-3.8.1-bin\apache-maven-3.8.1\bin\..Java version: 9.0.4, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_144Default locale: zh_CN, platform encoding: GBKOS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

第二章 Maven核心概念

2.1 Maven工程的目录结构

1.maven约定的目录结构,约定是大家都遵循的一个规则。每一个maven项目在磁盘中都是一个文件夹(项目 - Hello)

maven中特定的目录结构:
Hello
|—src
|—|—main - #放你的主程序java代码和配置文件
|—|—|—java - #你的程序包和包中的java文件
|—|—|—resources - #你的java程序中要使用的配置文件
|—|—test - #放测试程序代码和文件的(可以没有)
|—|—|—java - #测试你的程序包和包中的java文件
|—|—|—resources - #测试你的java程序中要使用的配置文件
|—pom.xml - maven的核心文件(maven项目必须有)
说明:Hello:根目录,也就是工程名
src:源代码
main:主程序
2.疑问:mvn compile 编译src/main目录下的所有java文件的
1)为什么要下载
maven工具执行的操作需要很多插件(java类–jar文件)完成的
2)下载什么东西了
jar文件–叫做插件–插件是完成某些功能
3)下载的东西存放到哪里了
默认仓库(本机仓库):D:\Java_code\2021.5.m2\repository
关于idea配置maven:https://blog.csdn.net/qq_37856300/article/details/85776785
执行mvn compile,结果是在项目的根目录下生成target目录(结果目录),
maven编译的java程序,最后的class文件都放在target目录
设置本机存放资源的目录位置(设置本机仓库):
1. 修改maven的配置文件,maven安装目录/conf/settings.xml
先备份settings.xml
2.修改local_repository指定你的目录(不要使用中文目录)
配置本地仓库(在settings里修改local_repository)

2.2 pom文件

pom.xml即Project Object Model项目对象模型。Maven把一个项目抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,pom.xml是Maven的灵魂。所以,maven环境搭建好之后,所有的学习和操作都是关于pom.xml的
1)坐标:唯一值,在互联网中唯一标识一个项目的

<groupId>公司域名的倒写</groupId>  <artifactId>自定义的项目名称</artifactId>  <version>自定义的版本号</version>

https://mvnrepository.com:搜索使用的中央仓库,使用groupId 或者 artifactId作为搜索条件
2)packaging:打包后压缩文件的扩展名,默认是jar,web应用是war
packaging可以不写,默认是jar
3)依赖
dependencies和dependency,相当于java代码中的import
你的项目中要使用的各种资源说明,比如我的项目要使用mysql驱动

<dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>  </dependencies>

4)properties:设置属性
5)build:maven在进行项目的构建时,配置信息,例如指定编译java代码使用的jdk版本德等等。

2.3 仓库

1)仓库是什么:仓库是存放东西的,存放maven使用的jar 和 我们项目使用的jar
> maven使用的插件(各种jar)
> 我们项目使用的jar(第三方的工具)
2)仓库的分类
> 本地仓库,就是在你的个人计算机上的文件夹,存放各种jar
> 远程仓库,在互联网上的,使用网络才能使用的仓库
①:中央仓库,最权威的,所有的开发人员都共享使用的一个最集中的仓库
http://maven.apache.org/:中央仓库的地址
②:中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都有这个镜像
③:私服:在公司内部,在局域网中使用的,不是对外使用的。
3)仓库的使用,maven仓库的使用,不需要人为参与。
开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服—>镜像—>中央仓库

2.4 Maven的生命周期

对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期的各个阶段,并且对每一个阶段提供相对应的命令,对开发者而言仅仅需要掌握一小堆的命令就可以完成项目各个阶段的构建工作。
maven的声明周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
maven的命令:maven可以独立使用,通过命令,完成maven的生命周期的执行。
maven可以使用命令来完成项目的清理、编译、测试等等。
Maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类。

2.5 Maven的常用命令

mvn clean 清理
mvn compile 编译
编译main/java/目录下的java为class文件,同时把class拷贝到target/classes目录下面
把main/resources目录下的所有文件,都拷贝到target/classes目录下
mvn test-compile 编译主程序(当前目录下生成一个target,里面存放编译主程序之后生成的字节码文件)
mvn test 测试(会生成一个目录surefire-reports,保存测试结果)
mvn test-compile 编译测试程序(当前目录下生成一个target,里面存放编译测试程序之后生成的字节码文件)
mvn package 打包主程序(会编译、编译测试、测试,并且按照pom.xml配置把主程序打包生成jar或者war包)
mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地仓库中,并且还会保存到私服仓库中。还会自动把项目部署到web服务器中)。

2.6 插件

Maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类。
1)单元测试(测试方法):用的是junit,junit是一个专门测试的框架(工具)。
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。
方法是测试的基本单位(单元)。
maven是借助单元测试来批量测试你嘞中的大量方法是否符合预期的。
2)使用步骤

  1. 加入依赖,在pom这个文件中加入单元测试依赖
<dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>      <scope>test</scope>    </dependency>  </dependencies>
  1. 在maven项目中的src/test/java目录下,创建测试程序。
    推荐的创建类和方法的提示:
    1.测试的类的名称是Test + 你要测试的类名
    2.测试的方法名称 是: Test+方法的名字
    例如你要测试HelloMaven
    创建测试类 TestHelloMaven

TestHelloMaven.java

package com.bjpowernodeimport org.junit.Assertimport org.junit.Testpublic class TestHelloMaven{@Testpublic void testAdd(){System.out.println("===maven junit testAdd()===")// 测试HelloMaven的add方法是否正确// HelloMaven hello = new HelloMaven();int res = hello.add(10,20);// 验证10 + 20是不是30,junit提供的方法,对比结果的// assertEquals(期望值,实际值),如果两个值相等证明是正确的,不相等就抛出异常,错误了。Assert.assertEquals(20,res);}}

其中testAdd叫做测试方法,它的定义规则是:
1.方法是public的,必须的
2.方法是没有返回值的,必须的
3.方法名称是自定义的,推荐是Test + 方法名称
4.在方法的上面加入 @Test

3)mvn compile
编译main/java/目录下的java为class文件,同时把class拷贝到target/classes目录下面把main/resources目录下的所有文件,都拷贝到target/classes目录下

第三章 Maven在IDEA中的应用

3.1 IDEA集成Maven

Idea集成maven

在这里插入图片描述
①配置当前工程的设置,file–settings --Build,Excution,Deployment – Build Tools
–maven
在这里插入图片描述
在这里插入图片描述

Build Tools—Maven—Runner
VM Options:archetypeCatalog=internal,maven项目创建时,会联网下载模板文件,比较大,使用archetypeCatalog=internal,不用下载,创建maven项目快。