Maven有什么作用
1、maven可以管理jar文件
2、自动下载jar和他的文档,源代码
3、管理jar直接的依赖,a.jar需要b.jar, maven会自动下载b
4、管理需要的jar版本
5、编译程序,把java编译为class
6、测试你的代码是否正确
7、打包文件,形成jar文件或者war文件
8、部署项目
构建
构建是面向过程的,就是有一些步骤,完成项目代码的编译、测试、运行、打包、部署等等
maven支持的构建包括:
1、清理,把之前项目编译的东西全部删除掉,为新的代码做准备
2、(批量)编译,把项目的源代码编译为执行代码(java-class文件)
-----maven可以同时把成百上千的文件编译为class-----
-----javac不一样,javac一次编译一个文件-----
3、(批量)测试,maven可以执行测试程序代码,验证你的功能是否正确,maven同时执行多个测试代码,同时测试很多功能
4、报告,生成测试结果的文件,测试通过没有。
5、打包,把你的项目中所有的class文件、配置文件等所有资源放到一个压缩文件中,这个压缩文件就是项目的结果文件,通常java程序压缩文件的扩展名是.jar,web应用压缩文件扩展名是.war
6、安装,把5中生成的文件jar,war安装到本地仓库
7、部署,把程序安装好,可以执行。
Maven的核心概念
1、POM :
一个文件,名称是pom.xml,翻译过来是项目对象模型(Project Object Model)
Maven把一个项目当做一个模型来使用,控制maven构建项目的过程,管理jar依赖
2、约定的目录结构:
maven项目的目录和文件的位置都是规定的
u
3、坐标:
是一个唯一的字符串,用来表示资源的。
4、依赖管理:
管理项目可以使用的jar文件
5、(了解)仓库管理:
资源存放的位置
6、(了解)生命周期:
maven构建项目的过程就是生命周期
7、(了解)插件和目标:
执行maven构建的时候用的工具是插件
8、继承:子继承父
9、聚合:归纳
maven约定的目录结构,
约定是大家都遵守的一个规则,每一个maven项目在磁盘中都是一个文件夹(项目Hello)
Hello/
---/src
------/main //放主程序java代码和配置文件
---------/java //程序包和包中的java文件
---------/resources //java程序中要使用的配置文件
------/test //放测试程序代码和文件的(可以没有)
---------/java //测试程序包和包中的java文件
---------/resources //测试java程序中要使用的配置文件
---pom.xml //maven的核心文件(maven项目必须有)
坐标
是用来指定项目的唯一值
<groupId>com.bjpowernode</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
首次使用Maven下载的资源默认仓库位置
C:\Users\(登陆操作系统用户名)Administrator.m2\repository
https://repo.maven.apache.org:中央仓库的地址
执行mvn compile,结果是在项目的根目录下声称target,(结果目录)
maven编译的java程序,最后的class文件都放在target目录中
仓库
仓库是存放东西的,存放maven使用的jar和我们项目使用的jar
maven使用的插件(各种jar)
项目使用的jar(第三方的工具)
仓库的分类
1、本地仓库。就是个人计算机中的文件夹
2、远程仓库,在互联网上,使用网络的人才能使用得仓库
(1)中央仓库,最权威的,所有开发人员都共享使用的一个集中的仓库
https://repo.maven.apache.org:中央仓库的地址
(2)中央仓库的镜像:就是中央仓库的备份,在各大洲和一些重要的城市都有镜像
(3)私服:是在公司的内部,在局域网中使用的,不是对外的。
www.mvnrepository.com:搜索使用的中央仓库,使用groupId或者artifactId作为搜索条件
仓库的使用
maven仓库的使用不需要人为参与。
开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服---->镜像—>中央仓库
pom文件
项目对象模型:pom.xml文件
基本信息:
modelVersion:只能是4.0
1、坐标(唯一的表示一个项目)
groupId:组织id,用来指定组织名称,是一个唯一值:
域名倒写:com.baidu
域名倒写+项目名:com.baidu.appolo
artifactId:项目名称,也是模块名称,对应groupId中的子项目
version:使用三位数字表示,1.0.0
可以在版本后带SNAPSHOT,快照(不稳定的版本)
2、packaging(可以不写):打包后压缩文件的扩展名,默认是jar,web应用是war
3、依赖
dependencies和dependency,相当于java代码中的import
项目中要使用各种资源说明,比如要使用mysql驱动
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
4、properties:设置属性
5、build:maven在进行项目的构建时,配置信息,例如指定编译java代码使用的jdk版本等
Maven的生命周期、命令、插件
生命周期:
就是Maven构建项目的过程,清理、编译、测试、报告、打包、安装、部署
命令:
maven独立使用,通过命令,完成maven的生命周期的执行
maven可以使用命令可以完成项目的清理、编译等等
mvn clean 清理(删除target)
mvn compile 编译主程序(生成target目录,存放主程序后生成的字节码文件)
mvn test-compile 编译测试程序(生成target,存放测试程序后生成的字节码文件)
mvn test 测试(生成一个目录surefire-reports,保存测试结果)
mvn package 打包主程序(会编译、编译测试、测试、并且按照pom.xml配置把主程序打包生成jar包或者war包)
mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy 部署主程序(不仅会打包、保存本地、还会保存到私服仓库中并部署到web容器中)
//以上命令必须进入pom.xml所在目录!
插件:
Maven命令执行时,真正完成功能的是插件,插件就是一些jar文件(一些类)
(1)单元测试(测试方法),用的是junit,junit是一个专门测试的框架(工具)。
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
2)使用步骤
1.加入依赖,在pom.xml加入单元测试依赖
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
2.在maven项目中的src/test/java目录下,创建测试程序。
推荐的创建类和方法的提示:
1.测试类的名称 是Test + 你要测试的类名
2.测试的方法名称 是:Test + 方法名称
例如你要测试HelloMaven ,
创建测试类 TestHelloMaven
@Test
public void testAdd(){
测试HelloMaven的add方法是否正确
}
其中testAdd叫做测试方法,它的定义规则
1.方法是public的,必须的
2.方法没有返回值, 必须的
3.方法名称是自定义的,推荐是Test + 方法名称
4.在方法的上面加入 @Test
3)mvn compile
编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件 都拷贝到target/classes目录下
第三部分:
1.在idea中设置maven ,让idea和maven结合使用。
idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。
使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
配置的入口 ①:配置当前工程的设置, file--settings ---Build, Excution,Deployment--Build Tools
--Maven
Maven Home directory: maven的安装目录
User Settings File : 就是maven安装目录conf/setting.xml配置文件
Local Repository : 本机仓库的目录位置
--Build Tools--Maven--Runner
VM Options : archetypeCatalog=internal
JRE: 你项目的jdk
archetypeCatalog=internal , maven项目创建时,会联网下载模版文件,
比较大, 使用-DarchetypeCatalog=internal,不用下载, 创建maven项目速度快。
②:配置以后新建工程的设置, file--other settings--Settings for New Project
2.使用模版创建项目
1)maven-archetype-quickstart : 普通的java项目
2)maven-archetype-webapp : web工程
依赖范围
使用scope表示的。scope的值有 compile, test, provided ,默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用。
maven构建项目 编译, 测试 ,打包, 安装 ,部署 过程(阶段)
junit的依赖范围是 test
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>a</groupId>
<artifactId>b</artifactId> b.jar
<version>4.11</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version> servlet.jar
<scope>provided</scope> 提供者
</dependency>
你在写项目的中的用到的所有依赖(jar ) ,必须在本地仓库中有。
没有必须通过maven下载, 包括provided的都必须下载。
你在servlet需要继承HttpServlet( provided) , 你使用的HttpServlet是maven仓库中的。
当你的写好的程序, 放到 tomat服务器中运行时, 此时你的程序中不包含servlet的jar
因为tomcat提供了 servlet的.jar
第五部分:
maven常用操作
1.maven的属性设置
<properties> 设置maven的常用属性
2.maven的全局变量
自定义的属性,1.在<properties> 通过自定义标签声明变量(标签名就是变量名)
2.在pom.xml文件中的其它位置,使用 ${标签名} 使用变量的值
自定义全局变量一般是定义 依赖的版本号, 当你的项目中要使用多个相同的版本号,
先使用全局变量定义, 在使用${变量名}
3.资源插件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
作用: mybatis课程中会用到这个作用
- 默认没有使用resources的时候, maven执行编译代码时, 会把src/main/resource目录中的文件拷贝到target/classes目录中。