*Maven
一、Maven的简介:
1、Maven是自动化构建工具,简单来讲就是一款项目管理工具;
2、传统项目没有使用Maven带来的问题:
2.1、很多模块,模块之间有关系,手工管理关系,比较繁琐。
2.2、需要很多第三方功能,需要很多jar文件,需要手工从网络中获取各个jar文件。
2.3、需要管理jar的版本,比如说你需要使用mysql5.1.5.jar,那么你那mysql1.4.0.jar就用不了。
2.4、管理jar文件之间的一依赖,比如说a.jar需要使用b.jar里面的类,必须要现获取b.jar才可以使用a.jar;
什么是依赖呢?
a.jar需要b.jar的这种关系就叫做依赖,或者你的项目中要使用mysql的驱动,也可以叫做项目依赖mysql驱动。
a.class使用b.class,这种情况叫做a依赖b类。
3、现在项目使用Maven后的优点:
3.1、Maven可以管理jar文件。
3.2、自动下载jar和他的文档,源代码。
3.3、管理jar之间的依赖,a.jar需要b.jar,Maven就会自动下载b.jar。
3.4、管理你需要的jar版本。
3.5、帮你编译程序,把java编译为class。
3.6、帮你测试你的代码是否正确。
3.7、帮你打包文件,形成jar文件,或者war文件。
3.8、帮你部署项目。
4、Maven用于项目的构建:
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,打包,部署等等。Maven支持的构建包括一下:
4.1、清理:把之前的项目编译的东西删除掉,为新的编译代码做准备。
4.2、编译:把程序源代码编译为执行代码,java-class文件。批量的,Maven可以同时把成百上千的文件编译为class。而javac不一样,javac一次只能编译一个文件。
4.3、测试:Maven可以执行测试程序代码,验证你的功能是否正确。批量的,Maven可以同时执行多个测试代码,同时测试很多功能。
4.4、报告:生成测试结果的文件,测试通过没有。等等。
4.5、打包:把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件,通常java程序,压缩文件就是.jar扩展名的。对于web应用来说,压缩文件的扩展名是.war。
4.6、安装:将步骤5中生成的jar文件或war文件安装到本机仓库。
4.7、部署:把程序安装好,就可以执行。
5、Maven的核心概念:
用好Maven,就必须了解这些概念。
5.1、POM:一个文件,名称是pom.xml,pom翻译过来叫做“项目对象模型”,简而意之Maven 可以将一个项目当做一个模型使用,从而控制Maven构建项目的过程,管理jar依赖。
5.2、约定的目录结构:Maven项目的目录和文件的位置都是规定的。
5.3、坐标:是一个唯一的字符串,用来表示资源的。
5.4、依赖管理:管理你的项目可以使用jar文件。
5.5、仓库管理(了解):你的资源存放的位置。
5.6、生命周期:Maven工具构建项目的过程,就是生命周期。
5.7、插件和目标(了解):执行Maven构建的时候使用的工具和插件。
5.8、继承
5.9、聚合
6、Mac下配置Maven的环境变量:
6.1、进入终端,输入vim .bash_profile,输入i,切换编辑状态,在此之前找到Maven的目录。
6.2、输入命令:
MAVEN_HOME=/Users/wufuqiang/maven_work/apache-maven-3.8.1
PATH= M A V E N H O M E / b i n : MAVEN_HOME/bin: MAVENHOME/bin:PATH
export MAVEN_HONE
export PATH
6.3、保存文件并退出,然后输入命令:source .bash_profile,目的是让刚配置的文件生效,然后输入mvn -v查看配置状态。
二、Maven的约定:
1、Maven约定的目录结构,约定是大家都遵循的一个规则。
每一个Maven项目在磁盘中都是一个文件夹(比如:项目-Hello)
Hello/
—/src
------/main #放你的主程序java代码和配置文件
---------/java #你的程序包和包中的java文件
---------/resources #你的java程序中要使用的配置文件
------/test #放测试程序代码和文件的(可以没有)
---------/java #测试程序包和包中的java文件
---------/resources #测试java程序中要使用的配置文件
—/pom.xml #Maven的核心文件(Maven项目必须有)
2、位于Maven根目录中,在终端内输入命令:mvn compile,表示编译src/main下的所有java文件。
3、https://repo.maven.apache.org:中央仓库的地址。
4、Maven工具执行的操作需要很多插件(java类–jar文件)完成的。
5、jar文件在Maven中称之为“插件”–插件是完成某些功能的。
6、首次使用Maven编译项目的时候,会下载很多插件,插件都存放在了–默认仓库(本机仓库),具体位置(以Windows为例)C:\Users\(登录操作系统的用户名)Adminstrator\MAVEN_HOME\repository
7、执行mvn compile命令后,结果是在项目的根目录下生成target目录(结果目录),maven编译的程序,最后的class文件都放在target目录中。
三、Maven中的仓库:
1、设置本地存放资源的目录位置(设置本机仓库):
1.1、修改Maven的配置未见,Maven安装目录/conf/settings.xml,先备份一份setting.xml(以防止后期还原)。
1.2、进入setting.xml文件,修改制定你新建的目录位置(不要使用中文目录)。
1.3、仓库是什么:仓库是存放各种东西的,存放Maven使用的jar和我们项目使用的jar。
>Maven使用的插件(各种jar)
>我们项目使用的jar(第三方工具)
1.4、仓库的分类:
>本地仓库:就是个人计算机上的文件夹,存放各种jar
>远程仓库:在互联网上,使用网络才能使用的仓库
①:中央仓库,最权威的,世界上所有开发人员共享使用的一个集中仓库:https://repo.maven.apache.org:中央仓库的地址。
②:中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都有镜像。
③:私服,在公司内部,在局域网中使用的,不是对外使用的。
1.5、仓库的使用:Maven仓库的使用不需要人为参与。
比如开发人员需要使用mysql驱动,首先会去查找本地仓库有没有,再去私服查找(前提是有私服的情况下),再去查找镜像,再去查找中央仓库,直到找到为止会自动备份一份到本地。
四、pom:项目对象模型,Project Object Model
1、坐标:唯一值,在互联网中唯一表示一个项目的。
公司域名的倒写
自定义项目名称
自定义版本号
https://mvnrepository.com/搜索使用的中央仓库,使用groupId或者artifactId作为搜索条件
2、packaging:打包后压缩文件的扩展名,默认是jar,web应用是war
packaging可以不写,默认是jar
3、依赖:
dependencies和dependency,相当于是java代码中的import
你的项目中要使用的各种资源说明,比如我的项目中要使用mysql驱动
mysql
mysql-connector-java
5.1.9
4、properties:设置属性
5、build:Maven在进行的构建时,配置信息,例如指定编译java代码使用的jdk版本。
五、Maven生命周期:Maven的命令,Maven的插件
Maven的生命周期:就是Maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署。
Maven的命令:Maven独立使用,通过命令,完成Maven的生命周期的执行。maven可以使用命令,完成项目的清理,编译,测试等等。
Maven的插件:Maven命令执行时,真正完成功能的是插件,插件就是一些jar文件。
1、单元测试(测试方法):用的是junit,junit是一个专门测试的框架(工具)。
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。
方法是测试的基本单位(单元)。
Maven借助单元测试,批量地测试类中的大量方法是否符合预期。
2、使用步骤:
1、加入依赖,在pom.xml加入单元测试依赖
junit
junit
4.13.2
test
2、在Maven项目中的src/test/java目录下,创建测试程序。
推荐的创建类和方法的提示:
2.1、测试类的名称,应该是:Test+你要测试的类名
2.2、测试方法的名称,应该是:Test+方法的名称
例如你要测试HelloMaven,创建测试类TestHelloMaven
类中编辑:
@Test
public void testAdd(){
测试HelloMaven的add方法是否正确
}
其中testAdd叫做测试方法,它的定义规则:
>方法是public,必须的。
>方法没有返回值,必须的。
>方法名称是自定义的,推荐是Test+方法名称
>在方法的上面加入@Test
六、IDEA中使用Maven:
1、在IDEA中设置Maven,让idea和maven结合使用。
idea中内置了maven,一般不适用内置的,因为使用内置修改maven的配置不太方便。
使用自己安装的maven,需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息。
配置的入口:①:配置当前工程的设置(Mac适用):
IntelliJ IDEA->Preferences…->Build,Execution,Deployment
->Build Tools->Maven:
Maven home path:maven的安装目录
User settings file:maven安装目录conf/setting.xml配置文件路径
Local repository:本地仓库的目录位置
->Build Tools->Maven->Runner:
VM Options:archetypeCatalog=intrenal
JRE:你项目的jdk
archetypeCatalog=intrenal,maven项目创建时,会联网下载模板文件,比较大(7M),使用archetypeCatalog=internal,就不用下载,创建maven项目是速度就会快。
②:配置以后新建工程的设置:(Mac适用):
File->New Project Settings->Preference for new project settings,剩下操作与上面一样。
2、使用模板创建项目
2.1、maven-archetype-quickstart:普通的java项目
2.2、maven-archetype-webapp:web工程
七、maven常见操作:
1、依赖范围,使用scope表示的:
scope的值有compile、test、provided、默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段中起作用。
maven构建项目:编译、测试、打包、安装、部署 过程(阶段)
比如:junit的依赖使用范围是test,表示只在测试中有用。
compile:默认,在构建项目时,编译、测试、打包、部署都需要用到;
test:只在测试阶段用到;
provided:在部署时,由服务器提供,项目本身不需要自带;
2、maven的属性设置:
标签中可以设置maven的常见属性,也可以自定义属性。
2.1、在通过自定义标签声明变量(标签名就是变量名)
2.2、在pom.xml文件中的其他位置,使用${变量名}使用变量的值
2.3、自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,再使用${变量名}来引用即可。
<properties>
<!-- maven构建项目使用编码,避免中文乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 编译代码使用的jdk版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<!-- 运行程序使用的jdk版本-->
<maven.compiler.target>1.7</maven.compiler.target>
<!-- 自定义变量,表示版本号-->
<spring.version>5.2.5</spring.version>
<junit.vsersion>4.13</junit.vsersion>
</properties>
3、资源插件:
3.1、作用:mybatis课程中会用到这个作用
>默认没有使用resources的时候,maven执行编译操作时,会把src/main/resources目录中的文件拷贝到target/classes目录总。对于src/main/java目录下的非java文件一律不处理,也不会拷贝到target/classes目录中
>有些时候,当我们的程序需要把一些文件放在src/main/java目录中,当我们在执行java程序时,需要用到src/main/java目录中的文件时,我们就需要使用到resources标签,需要告诉maven在mvn compile src/main/java目录下的程序时,将里面的文件一同拷贝到target/classes目录中。此时就需要在中加入
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml文档都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--filtering选项false不启用过滤器,*.property已经起到过滤的作用了-->
<filtering>false</filtering>
</resource>
</resources>
</build>