Maven
存在的问题
1.一个项目就是一个工程
如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个工程,利于分工协作
借助与Maven就可以将一个项目拆分成多个工程
2.项目中需要的jar包必须手动复制、粘贴到WEB——INF/lib目录下
同样的jar包文件重复出现在不同的项目工程中,一方面浪费存储空间,另外也让工程比较臃肿
借助Maven,可以将jar包仅仅保存在‘仓库’中,有需要使用的工程“引用”这个文件接口,并不需要真的把jar包复制过来
jar包需要别人替我们准备好,或到官网下载
不同技术的官网提供jar包下载的形式是五花八门的
有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的
如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的
借助于Maven可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包已经按照统一的规范存放在了Maven的中央仓库中
一个jar包依赖的其他jar包需要自己手动加入到项目中
FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar
如果所有jar包之间的依赖都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本
Maven会自动将被依赖的jar包导入进来
需要改进项目的开发和管理,需要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.帮你部署项目
构建(项目的构建)
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等 Maven支持的构建: 1.清理:把之前项目编译的东西删除掉,为新编译的代码做准备 2.编译:java - class文件(批量的,maven可以同时把成百上千个文件编译为class) 3.测试:maven可移植性测试程序代码,验证你的功能是否正确 批量的,maven同时执行多个代码测试,同时测试很多功能 4.报告:生成测试结果的文件,测试是否通过 5.打包:把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中 这个压缩文件就是项目的结果文件,通常java程序,压缩文件是jar扩展名 对于web应用,压缩文件扩展名是.war 6.安装:把生成的文件jar,war安装到本机仓库 7.部署:把程序安装好可以执行
Maven核心概念
POM: 一个文件 名称是pom.xml,pom翻译过来叫做项目对象模型 maven把一个项目当做一个模型使用,控制maven构建项目的过程,管理jar依赖 约定目录结构: maven项目的目录和文件的位置都是规定的 坐标: 是一个唯一的字符串,用来表示资源的 依赖管理: 管理你的项目可以使用jar文件 仓库管理: 你的资源存放位置 生命周期: maven工具的构建项目的过程,就是生命周期 插件和目标: 执行maven构建的时候用的工具是插件 继承 聚合
Maven工具的安装和配置
1.需要从maven的官网下载maven的安装包 apache-maven-3.8.2-bin.zip 2.解压安装包,解压到一个目录,非中文目录 子目录 bin :执行程序,主要是mvn.cmd conf:maven工具本身的配置文件 settings.xml 3.配置环境变量 在系统的环境变量中,指定一个M2_HOME的名称,指定他的值是maven工具安装目录,bin之前的目录 M2_HOME = D:\软件\Maven\apache-maven-3.8.2;(这是我的路径) 再把M2_HOME加入到path之中,在所有路径之前加入%M2_HOME%\bin; 4.验证,新的命令行中,执行mvn -v 注意:需要配置JAVA_HOME,指定jdk路径 出现以下内容,maven安装配置正确 Apache Maven 3.8.2 (ea98e05a04480131370aa0c110b8c54cf726c06f) Maven home: D:\软件\Maven\apache-maven-3.8.2 Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_291\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
约定
maven约定的目录结构
约定是大家都遵循的一个规则 每一个maven项目在磁盘中都是一个文件夹(项目-Hello) Hello/ ---/src ------/main #放你的主程序java代码和配置文件 ----------/java #你的程序包和包中的java文件 ---------/resources #你的java程序中要使用的配置文件 ------/test #放你的测试代码和文件(可以没有) ----------/java #测试程序包和包中的java文件 ---------/resources #测试java程序中要使用的配置文件 ---/pom.xml #maven的核心文件(maven项目必须有)
对于某个依赖,Maven只需要3个变量即可唯一确定某个jar包:
groupId:属于组织的名称,类似Java的包名;
artifactId:该jar包自身的名称,类似Java的类名;
version:该jar包的版本。
在实际开发过程中,经常使用的命令有:
mvn clean
:清理所有生成的class和jar;
mvn clean compile
:先清理,再执行到compile;//编译
mvn clean test
:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile;
mvn clean package
:先清理,再执行到package。//打包
lifecycle相当于Java的package,它包含一个或多个phase;
phase相当于Java的class,它包含一个或多个goal;
goal相当于class的method,它其实才是真正干活的。
通常情况,我们总是执行phase默认绑定的goal,因此不必指定goal。
常用插件
maven-shade-plugin:打包所有依赖包并生成可执行jar;
cobertura-maven-plugin:生成单元测试覆盖率报告;
findbugs-maven-plugin:对Java源码进行静态分析以找出潜在问题。
Maven支持模块化管理,可以把一个大项目拆成几个模块:
可以通过继承在paren
t的pom.xml统一定义重复配置;
可以通过modules
编译多个模块。
设置本机存放资源的目录位置:
1.修改maven的配置文件,maven安装目录/conf/settings.xml
先备份
2.修改 localRepository指定你的目录(不要使用中文目录)
仓库
中央仓库
其实我们使用的大多数第三方模块都是这个用法,例如,我们使用commons logging、log4j这些第三方模块,就是第三方模块的开发者自己把编译好的jar包发布到Maven的中央仓库中。
私有仓库
私有仓库是指公司内部如果不希望把源码和jar包放到公网上,那么可以搭建私有仓库。私有仓库总是在公司内部使用,它只需要在本地的~/.m2/settings.xml中配置好,使用方式和中央仓位没有任何区别。
本地仓库
本地仓库是指把本地开发的项目“发布”在本地,这样其他项目可以通过本地仓库引用它。但是我们不推荐把自己的模块安装到Maven的本地仓库,因为每次修改某个模块的源码,都需要重新安装,非常容易出现版本不一致的情况。更好的方法是使用模块化编译,在编译的时候,告诉Maven几个模块之间存在依赖关系,需要一块编译,Maven就会自动按依赖顺序编译这些模块。
仓库的使用不需要人为参与
开发人员需要使用mysql驱动-->maven首先查本地仓库-->私服->镜像-->中央仓库
junit
使用步骤:
1.加入依赖,在pom.xml加入单元测试依赖
2.在maven项目中的src/test/java目录下,创建测试程序
推荐使用类和方法的提示:
1.测试类的名称:Test + 你要测试的类名
2.测试的方法名是 Test + 方法名称
测试方法定义规则
1.方法是public
2.方法没有返回值
3.方法名称是自定义的,推荐 Test + 方法名
4.在方法的上面加入@Test
mvn compile
编译main/java目录下的java为class文件,同时把class拷贝到target/classes目录下面
把main/resources目录下的所有文件都拷贝到target/classes目录下