Maven
一,Maven简介
1,Maven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。为了实现这一目标,Maven处理了几个关注的领域:
- 简化构建过程
- 提供统一的构建系统
- 提供高质量的项目信息
- 鼓励更好的发展实践
虽然使用Maven并不能消除了解底层机制的需要,但Maven确实保护开发人员免受许多细节的影响。
什么是软件工程:
为了能能够实现软件的流水线式生产,在设计和构建软件的是hi偶能能够有一种规范和工程化的方法,人们便提出了软件工程的概念。
完成一个java项目需要做的工作:
- 1,分析项目要做什么,要知道项目有哪些组成 部分。
- 2,设计项目,用过哪些步骤,使用哪些技术,需要多少人,多啊尝试阿金完成。
- 3,组建团队,找人,购置设备,服务器,软件,笔记本。
- 4,开发人员写代码,开发人员需要测试自己的代码。重读多次的工作。
- 5,测试人员,测试项目的功能是否符合要求。
- 测试开发人员提交的代码,如果测试有问题,需要开发人员修改,在提交给测试人员,测试人员再测试代码,再提交给开发修改。
传统的开发项目中的问题(没有使用Maven管理的项目)
1)很多模块,模块之间有关系,手工管理关系,比较繁琐。
2)需要很多第三方功能,需要很对jar包文件,需要手工从网络中获取各个jar包。
3)需要管理jar包的版本。需要5.5.1的就不能是4.0.0的包
4)管理依赖,管理jar文件抓紧啊的依赖,你的项目要使用a.jar,需要使用b.jar里面的类。
必须首先获取到B.JAR才可以,然后才能使用a.jar,
需要改进项目的开发和管理,就需要Maven
- Maven可以管理jar文件
- 自动下载jar和他的文档,源代码等。
- 管理jar直接的依赖,a.jar需要b.jar,Maven会自动下载b.jar
- 管理你需要的jar版本
- 帮你测试你的代码时候正确。
- 帮你打包文件,形成jar文件,或者war我呢见
- 帮你部署项目。
构建:
项目的构建,面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
Maven支持的构建包括有:
- 清理,把之前的项目编译的东西删除掉,我新的编译代码做准备。
- 编译,把程序源代码编译为执行代码,java-class文件批量的,Maven可以同时把成千上百的文件编译为class。javac不一样,javac一次编译一个文件。
- 测试,Maven可以执行测试程序代码,验证你的功能是否只正确。批量的,Maven同时执行多个测试代码,同时测试很多功能。
- 报告,生成测试结果的文件,测试通过没有。
- 打包,把你的项目中松油的class文件,配置文件等所有资源我放到一个压缩文件中。这个压缩文件就是项目的结果文件,通过java程序,压缩文件是jar扩展的。
- 安装,把上面生成的jar我呢见,war文件安装奥本机仓库。
- 部署,把程序安装好可以执行。
Maven的核心概念
用好Maven,了解这些概念
- POM
- 指的是一个文件,我呢见的名称是pom.xml,pom(项目对象模型),Maven把一个项目当作一个模型来使用,可以控制Maven构建项目的国策灰姑娘,管理jar依赖。
- 约定的目录结构
- Maven项目的目录和文件的文职都是规定的,不能随便乱建。
- 坐标
- 是一个唯一的字符串,用来表示资源的。
- 依赖管理
- 管理项目中可以使用的jar包
- 仓库管理(了解)
- 资源存放的位置。
- 生命周期(了解)
- Maven构建项目的过程。
- 插件和目标(了解)
- 执行Maven构建的时候用的工具是插件。
- 继承(后面讲)
- 聚合(后面讲)
二,Maven核心概念****
使用的是Maven的命令,完成maven使用,再idea中直接使用maven,代替命令。理解命令了,更加方便的使用Maven功能。
-
安装Maven和配置
-
下载:Maven.apache.org—-download——apache-maven-3.6.3-bin.zip(比较常用的版本,3.3.9)
-
下载之后解压缩即可。
- bin:执行程序,只要是mvn.cmd
- conf:maven工具本身的配置文件 setting.xml
-
配置环境变量。
- M2_HOME = Maven的安装目录。
- path = %M2_MAVEN%\bin
-
在cmd中,执行mvn -v即可。
-
Maven工程约定的目录结构
每一个Maven项目都是一个文件夹(项目名称)(Hello)
|—Hello
|—|—src
|——|—main #主程序的java代码和配置文件
|——|—main—java #你的程序包和包中的java文件
|——|—main—resources #你的java程序包中需要使用的配置文件
|——|—test #放测试程序代码和文件的(可以没有)
|——|—test—java #你的测试程序包和包中的java文件
|——|—test—resources #你的测试程序包中需要使用的配置文件
|—pom.xml #Maven项目的核心文件(maven项目必须有)
https://repo.maven.apache.org 中央仓库
Mavne执行的操作需要很多的插件完成,就是很多java类,需要先到仓库中下载这些插件,才能用。
下载的jar文件在maven中叫做插件。
这个东西放在哪里了呢?放在C盘用户administor文件夹的.m2文件夹下的repository文件夹中。
本地默认仓库:repository;(这个路径可以修改,后面可以根据需求修改)
BUILD SUCCESS! 这样就编译成功了。
执行mav compile,结果是在项目的根目录下生成了target目录(结果目录)
maven编译的class文件都放在这个文件夹里面。
修改maven下载路径
1,修改maven的配置文件,maven安装目录/conf/setting.xml 需要先备份这个文件
2,打开上述文件,修改标签
要放到外面,不能放到注释李米娜,放到注释里面不起作用。(配置本地仓库)整个路径中不要存在中文即可。
3,仓库分类:
- 仓库:是存放东西的地方,存放maven使用的jar和我们项目使用的jar包的地方
- 本地仓库:个人计算机上的文件夹
- 远程仓库:在互联网上,使用网络才能使用的仓库
- 中央仓库:最权威的仓库,世界上所有的开发人员都在使用的仓库。
- 中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都是镜像。
- 亚洲的镜像,欧洲的镜像
- 私服:通过互联网访问,在公司的内网中使用的。
4,仓库的使用,maven仓库的使用不需要人为参与。
开发人员需要用mysql驱动,maven首先检查本地仓库,私服,镜像,中央仓库。
5,pom文件,项目对象的模型,把一个项目的机构和内容抽象成一个模型,在xml文件中进行胜面更,以方便进行构建和描述。pom.xml文件时maven的灵魂,maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。
pom.xml初识
moudelVersion maven模型的版本,对于maven2和maven3来说i,他只能是4.0.0
groupID 组织id,一般是公司域名的倒写,域名倒写:com.baidu,域名倒写:com.baidu.applo;
version 项目版本号,还在开发中,非稳定版本,通常在后面加上-SNAPSHOT,version使用三位数字1.0.0类似
以上三个加在一起表示一个坐标,唯一标识
www.mvnrepository.com:搜索使用的中央仓库,使用groupID或者artifactID作为搜索条件。
www.mvnrepository.com:这个也是个中央仓库。
packaging 项目打包后压缩文件的扩展名,默认是jar,web应用是war,packaging不写,默认是jar。
dependencies和depedency:项目中要使用的各种资源,相当于java中的import。
<dependencies>
<--! 依赖 java代码中import-->
<dependency>
<groupID>mysql</groupID>
<artifactID>mysql-connector-java</artifactID>
<version>5.1.9</version>
</dependency>
</dependencies>
<properties><--! 配置属性-->
<java-version>1.8</java-version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<--! build表示与构建相关的配置,例如设置编译插件的版本jdk版本等信息-->
</build>
比较重要的两个依赖
<--! 日志依赖-->
<dependency>
<groupID>log4j</groupID>
<artifactid>log4j</artifactid>
<version>1.2.17</version>
</dependency>
<--! 单元测试依赖 -->
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.11</version>
</dependency>
Maven的生命周期
生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署等
Maven的命令 maven的插件
命令:maven命令可以单独使用,通过命令,完成maven的生命周期的执行,maven可以使用命令完成项目的清理,编译,测试等等。
maven插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类文件。
1)单元测试:用的时Junit,junit是一个专门测试的框架(小工具),测试的内容:测试类中的方法,每一个方法都是独立测试的。方法时测试的基本单位。(单元)。
2)maven借助单元测试来批量的测试你类中的大量方法时候符合预期的。
3)使用步骤
-
添加依赖,在pom.xml文件中,添加依赖。JUnit-4.13
-
在maven项目中的src/test/java目录下,创建测试程序。
- 1,测试类的名称是:Test+你要测试的类名
- 2,测试的方法名称是 Test+方法名称
-
例如TestAdd方法叫做测试方法,它定义的规则是:
-
1,方法是public的 必须的
-
2,方法没有返回值 必须的
-
3,方法名称是自定义的 推荐是Test+方法名称
-
4,方法体上面要有@Test注解(annotation)
-
@(Test) public static void TestAdd(){ HelloMaven hm = new HelloMaven(); int res = hello.add(10,20); Assert.assertEquals(30,res); //Assert.assertEquals(期望值,实际值) //如果两个值相等,就说明是正确的,如果不相等,说明就不是正确的类。 }
-
Maven常用的命令
1,mvn clean 清理:会删除原来编译和测试的目录,即target目录,但是已经install到仓库里的包不会删除。
2,mvn compile 编译测试程序:会在当前目录下生成一个target,里面存放编译测试程序之后生成的字节码文件。
3,mvn test :测试:会生成一个目录,surefire-reports,保存测试结果.
4,mvn package 打包主程序:会编译,编译测试,测试,按照pom.xml配置把主程序打包生成jar包或者war包中。
5,mvn install 安装主程序:会把工程打包,并且按照本工程的坐标保存到本地仓库中去。
6,mvn deploy 部署主程序:会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中,还会自动把项目部署到web容器中。
7,mvn test-compile :编译测试程序。
8,mvn package 打包
9,mvn delpoy 部署主程序,按照坐标保存到本地仓库中。
注意:执行以上命令必须在命令行中执行。
单元测试
简介:
用的是Junit,junit是一个专门测试的框架(工具),测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中大量的方法是否符合预期。
使用步骤:
-
加入依赖,在pom.xml文件中加入单元测试依赖
-
<!--单元测试--> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.11</version> <scope>test</scope> </dependency>
-
-
在maven项目中的src-test-java包下,添加测试程序。
- 推荐的创建类和方法的提示:
- 测试类的名称:Test+要测试的类名
- 测试的方法名称:Test+方法名称
- 推荐的创建类和方法的提示:
-
例如要测试HelloWorld
-
创建测试类TestHelloWorld
-
@Test public static void TestHelloWorld(){ public void TestHello(); }
打包文件只包含src-main目录下的东西,不包含Test目录下的东西。安装到仓库中,就可以使用仓库中的jar包了。
三,Maven在idea中的应用***
-
结合IDEA和Maven创建Maven项目
在idea中设置Maven,让Maven和idea结合使用。idea中内置了Maven,一般不使用内置的,使用自己安装的Maven。需要去覆盖,idea中默认的设置
让idea直到Maven的安装路径。
2.配置的入口:
-
配置当前工程的设置。File–settings—maven—-build,Excution,Desployment,—–buildTools—-maven
Maven Home directory :maven的安装目录
User Setting File : maven安装目录的cofn/setting.xml文件
Local Rrpository : 本机仓库的目录位置
–Build Tools–Maven–Runner
VM Options : archetypeCatalog=internal
JRE:你的项目JDK
archetypeCatalog=internal,Maven项目创建时,会联网下载模板文件,比较大,使用archetypeCatalog=internal,不用下载,创建Maven项目的速度块;
-
配置以后新建工程的设置 :file–otherSetting–maven—setting for new project—……
-
插件管理
-
可以不要的相关。
四,依赖管理
maven是管理依赖的工具,使用依赖将jar包导入到项目中。不需要将jar包拷入项目中。
单元测试的依赖方式,这是用的最多的一个依赖。
仓库是存放jar包的,maven的插件等等。
本地仓库:可以安装maven仓库,设置路径的时候不要有中文路径,不要有空格。
如果本地仓库中有的话,就直接使用,如果没有的话会到中央仓库下载maven。中央仓库最权威的网址百度一下一大堆。还可以到阿里巴巴的maven仓库下载内容。还有就是公司的局域网内部使用的maven仓库。还有中央仓库的镜像,中央仓库比较慢的时候可以连接中央仓库镜像来下载相关的插件。
主要就是的坐标,约定目录结构,命令。重点掌握这几个即可。可以去官网查询它的内容。
依赖范围:控制依赖的范围:compile,test,provided。
表示依赖的使用顺序,maven构建项目:清理,编译,测试,打包,安装,部署过程。
provided:当程序在编译,测试的时候需要用这个jar包,但是打包的时候就不需要将这个打包进去了。
没有提供servlet相关的jar包,这个pom文件中提供了这个jar包,所以不需要我们再自己添加。这个方便了开发的步骤等。轻装上阵,不需要自己额外的添加任何jar包。所以比较方便。
查官方文档;项目经理指定功能版本。
设置maven的常用属性
maven的全局变量
自定义属性:1,再通过自定义标签声明变量(标签名就是变量名)
2,再pom.xml文件中的其他位置,使用${标签名}使用变量的值
自定义全局变量一般是i当以依赖的版本号,当你的项目重要使用多个相同的版本号,先使用全局变量定义,在使用${变量名}来使用这个变量。
资源插件
<build>
<!--资源插件-->
<resources>
<resource>
<directory>src\main\java</directory>
<includes>
<include>**\*.properties</include>
<include>**\*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src\main\resources</directory>
<includes>
<include>**\*.properties</include>
<include>**\*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
作用:mybatis课程中会用到这个作用
五,Maven常用设置
1,默认没有使用resources的时候,maven执行编译代码时,会把src/main/resources目录中的问价你拷贝到target/classes文件夹中。
2,对于src/main/java文件夹下面的非java文件不会处理的,不会拷贝到另一个文件夹中。
3,程序有需要把一些文件放到src/main/java目录中,当我们再执行java程序的时候,需要用到src/main/java目录中的文件。需要告诉maven再mvn compile src/main/java目录下的程序中,需要把文件处理并拷贝到同一目录下。此时就需要在中添加resource路径。
依赖范围:compile默认,在构建编译,打包,部署都需要
test:只在测试阶段需要
provided:在部署时,由服务器提供,项目本身不需要自带
maven自定义变量和自己的属性。maven插件,maven资源插件。