一、maven的好处
使用传统的web项目开发的crm大小 40多m
同样的项目使用maven,它的大小只有几百KB
同样的项目使用maven工程来实现,它的项目源码很小,可以初步推断里面一定没有jar包,没有jar包的项目
二、maven优点是如何实现的
1、依赖管理
2、项目的一键构建
(编译--测试--运行--打包--安装)
构建
指的是项目从编译--测试--运行--打包--安装整个过程都交给maven进行管理,这个过程称为构建
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成。
清理-》编译-》测试-》报告-》打包-》部署
清理阶段对应maven的命令是clean,清理输出的class文件
编译阶段对应maven的命令是complie,将java代码编译成class文件
打包阶段对应maven的命令是package,java工程可以打包成jar包,web可以打成war包
三、Maven的安装
从hhtp://maven.apache.org/download.cgi下载
解压到一个不含中文和空格的目录中
bin目录 mvn.bat(以run方式运行目录)、mvnDebug.bat(以debug方式运行项目)
boot目录maven运行需要类加载器
conf目录settings.xml整个maven工具核心配置文件
lib目录maven运行依赖jar包
环境变量配置:
电脑上需要安装jdk1.8+版本(将JAVA_Home/bin配置环境变量path)
配置MAVEN_HOME
D:\apache-maven-3.3.9
将%MAVEN_HOME%/BIN加入环境变量path
通过mvn -v命令检查maven是否安装成功
maven的工作需要从仓库下载一些jar包,从远程仓库(可以理解成互联网上的仓库)下载jar包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用再每次从远程仓库中下载了
本地仓库的配置
D:\apache-maven-3.3.9\conf\settings.xml文件中
<!--本地仓库的路径-->
<localRepository>D:\Repositories</localRepository>
项目中 src是放项目的源代码
pom.xml作为一个maven工程必不可少的 代表了maven的配置文件
maven的目录结构
java 放入项目的源码
resources 放入配置文件
webapp 页面素材
四、Maven命令
clean 是maven工程的清理命令,执行clean会删除target目录的内容
package 是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包
install 是maven工程的安装目录,执行install将maven打成jar包或war包发布到本地仓库
test 是maven工程的测试命令,会执行 src/test/java下的单元测试类
cmd执行mvn test 执行src/test/java 下单元测试类
complie 是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下
cmd中用mvn complie
五、生命周期
maven对项目构建过程分为三套独立的生命周期,分别为:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等
Site Lifecycle 生成项目报告,站点,发布站点
阶段
当后面的命令执行时,执行前面的操作
六、使用eclipse开发maven项目
1、m2e的插件
因为使用的eclipse版本比较高,会自带maven插件
preferences->maven->Installations 选择自己的maven版本 没有先add
2、preferences->maven->User Settings 配置本地仓库让eclipse找jar包
D:\apache-maven-3.3.9\conf\settings.xml
3、构建索引
Window->show view->other->maven repositories
4、重构索引
Local repository 右键 rebuild index
5、在eclipse中创建maven工程
Maven Project 将来项目拆分的时候,需要创建一个这样的工程
Maven Module maven模块:可以用它来创建一个项目的某个模块,比如:crm-dao、crm-service、crm-web
勾选 create a simple project 会生成maven的目录结构
use a default workspace location 放在默认名称空间下
group id 公司组织名称
Artifact id 项目名
version 版本
Packaging
name
description
可以看到工程,但是报错,需要手动添加WEB-INF 和他的web.xml
src/java/main 创建一个servlet,但报错
要解决问题,就是要把servlet-api-xxx.jar包放进来,作为maven工程应当添加servlet的坐标,从而导入它的jar包
直接打开过程的pom.xml文件,再添加坐标
添加jar包的坐标时,还可以指定这个jar包将来的作用范围
七、基本概念
A依赖B:需要在A的pom.xml文件中添加B的坐标,添加左边时需要指定依赖范围,依赖范围包括:
complie:编译范围,指A在编译时依赖B,此范围为默认范围,编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包
provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用,provided依赖在编译和测试的时候需要,在运行时不需要.比如:servlet api被tomcat容器提供
runtime:runtime依赖在运行和测试系统的时候需要,而在编译的时候不需要,比如:jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包
test:test范围依赖 在编译和运行时不需要,只有在测试编译和测试运行阶段可用,比如:junit,由于运行时不需要所以test范围依赖不会被打包
system:system范围依赖与provided类似,但是必须显式的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐用
设置编译版本
使用maven的插件来设置成jdk1.8
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</build>
项目右键 maven->update project