Maven_day01
1. maven介绍
1.1 什么是maven
maven译为“专家”,“内行”,是apache下的一个纯java开发的开源项目,是一个项目管理工具,可以对java项目进行构建,依赖管理。
1.2 传统项目构建
构建过程:
创建一个工程,在工程中编写源代码及配置文件,对源代码进行编译,将java文件编译成class文件,执行junit单元测试,最后将工程打包成war包部署到tomcat运行。
1.3 maven项目构建
maven将项目的构建过程标准化,每个阶段使用一个命令完成。
- maven工程构建的优点
- 一个命令完成构建,运行,方便快捷
- maven对每个构建阶段进行规范,有利于大型团队协作开发
1.4 传统项目依赖管理
传统项目工程管理所依赖的jar包完全靠人工进行,手工导入jar包。
-
缺点
-
v从网上找jar包不方便,有些jar包找不到
-
jar包加入到工程中导致工程过大
-
没有对jar包版本的统一管理,容易导致版本冲突
-
1.5 maven项目依赖管理
maven项目中所依赖的jar包不需要手工添加,只需要在maven工程的配置文件pom.xml中添加jar包的坐标,就能自动从maven仓库中下载添加所需jar包。
- 优点
- 对jar包版本统一管理,避免版本冲突
- maven中的jar包非常全,使用起来很方便
1.6 使用maven的好处
2. maven安装及配置
-
下载
-
解压
将maven解压到一个不含中文及空格的目录中。
-
maven环境变量配置
-
配置jdk,maven3.3.9需要的jdk版本为1.7以上
-
配置MAVEN_HOME
-
将%MAVEN_HOME%/bin加入到path中
-
4. 测试maven是否安装成功
cmd窗口运行mvn -v,看到maven版本为3.3.9及jdk版本为1.7以上,即安装成功:
3. maven仓库
3.1 三种仓库
- 本地仓库
用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用的插件或jar包优先从本地仓库查找。默认本地仓库在${user.dir}/.m2/repository,${user.dir}表示windows用户目录,例如:C:UsersWZL1998.m2 epository。
- 远程仓库
远程仓库可以在互联网内,也可以在局域网内。当本地仓库找不到时,就去远程仓库下载。
- 中央仓库
maven团队维护的,存储了非常全的jar包。https://repo1.maven.org/maven2
3.2 配置本地仓库
我的本地仓库在D:JavaEE16.Maven epository,在D:JavaEE16.Mavenapache-maven-3.3.9confsettings.xml配置本地仓库位置。
<localRepository>D:JavaEE16.Maven
epository</localRepository>
4. maven项目工程目录
- src/main/java: 存放项目的.java文件
- src/main/resources: 存放项目资源文件,如spring,mybatis配置文件
- src/test/java: 存放所有的单元测试.java文件,如junit测试类
- src/test/resources: 测试资源文件
- target: 项目输出位置,编译后的class文件会输出到此目录
- pom.xml: maven项目核心配置文件
5. 常用maven命令
在dos窗口中运行时,前面要加上mvn;在eclipse中不需要加
-
compile
编译命令,将src/main/java下的文件编译为class文件输出到target目录下。这个命令只会对java源程序编译,不会编译测试代码,编译测试类:mvn test-compile。
-
test
测试命令,会运行src/test/java下的单元测试类。
-
clean
清理命令,删除target目录的内容。
-
package
打包命令,将java工程打包成jar包,web工程打包成war包。
-
install
安装命令,将maven工程打成war包发布到本地仓库。位置:仓库/${groupId}/{artifactId}/version目录。
6. 生命周期(了解)
6.1 三套生命周期
maven对项目构建过程分为三套相互独立的生命周期。
-
clean lifecycle
在进行真正的构建之前进行一些清理工作。
-
default lifecycle
构建的核心部分,编译,测试,打包,部署等。
-
site lifecycle
生成项目报告,站点,发布站点。
6.2 生命周期的阶段
每个生命周期有很多阶段,每个阶段对应一个执行命令。
-
clean lifecycle
pre-clean: 执行一些需要在clean之前完成的工作
clean: 移除所有上一次构建生成的文件
post-clean: 执行一些需要在clean之后立刻完成的工作
-
default lifecycle
-
site lifecycle
pre-site: 执行一些需要在生成站点文档之前完成的工作
site: 生成项目的站点文档
post-site: 执行一些需要在生成站点文档之后完成的工作,并为部署做准备
site-deploy: 将生成的站点文档部署到特定的服务器上
在maven中,只要在同一个生命周期,执行后面的阶段,前面的阶段也会被执行,而不需要额外去输入前面的阶段。执行某个生命周期的某个阶段不会影响其它的生命周期。
如果要同时执行多个生命周期的阶段,可在命令行输入多个命令,中间以空格隔开。如:clean package,该命令执行clean生命周期的clean阶段和default生命周期的package阶段。
7. maven概念模型
maven包含一个项目对象模型(project object model),一组标准集合,一个项目生命周期(project lifecycle),一个依赖管理系统(dependency management system),和用来运行定义在生命周期阶段中插件(plugin)目标(goal)的逻辑。
maven概念模型图:
-
项目对象模型
一个maven工程都有一个pom.xml文件,在该文件中定义项目的坐标,项目依赖,项目信息,插件目标等。
-
标准集合
maven将整个项目管理过程定义一组标准。如:通过maven构建工程由标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义等。
-
项目生命周期
-
依赖管理系统
对项目所依赖的jar包进行统一管理。
<!--添加依赖包--> <dependencies> <!--此项目用到servlet,所以需要servlet-api--> <dependency> <!--groupId和artifactId统称为坐标,保证项目的唯一性--> <!--组织名--> <groupId>javax.servlet</groupId> <!--模块名,项目名--> <artifactId>servlet-api</artifactId> <!--版本号--> <version>2.5</version> <!--依赖的作用范围--> <scope>provided</scope> </dependency> </dependencies>
-
插件目标
maven管理项目生命周期过程都是基于插件完成的。
8. 入门项目构建
8.1 eclipse安装m2e插件
新建项目时如果能找到maven项目即表示maven插件已存在,但项目为了统一maven版本不会使用内置的maven版本,这里使用maven3.3.9。
指定maven安装目录:
8.2 User setting配置
配置使用的maven的settings.xml文件,使用maven安装目录下的settings.xml文件:
修改了settings.xml文件要点击update settings按钮对本地仓库重建索引,点击reindex。
8.3 eclipse浏览本地仓库
测试eclipse是否可以浏览maven的本地仓库,找到local respository本地仓库项,如果无法查看本地仓库,则右键点rebuild index重建索引即可。
8.4 定义maven坐标
每个maven工程都要定义本工程的坐标,坐标是maven对jar包的身份定义。如:
<!--组织名,类似包名-->
<groupId>com.itheima.maven</groupId>
<!--模块名,项目名-->
<artifactId>16.1maven</artifactId>
<!--版本号;snapshot为快照版本,即非正式版本,release为正式发布版本-->
<version>0.0.1-SNAPSHOT</version>
<!--打包类型;jar:打包成jar包;war:打包成war包;pom:用于maven工程的继承,通常父工程设置为pom-->
<packaging>war</packaging>
8.5 构建web工程
8.5.1 创建maven工程
-
右键new maven project
-
勾选create a simple project(skip archetype selection)
即跳过骨架,如果不跳过,则创建的maven工程目录不完整。
如果不勾选:
-
定义坐标
工程目录示意:
这里报错是因为缺少web工程目录,解决方法:右键项目-->javaEE tools-->generate deployment descriptor stub。生成后:
8.5.2 设置编译jdk版本
- 方法一:
在pom.xml中加入:
<!--修改全局jdk版本后,则此段代码可不加-->
<build>
<plugins>
<plugin>
<!--添加编译器:右键项目==maven==add plugin==搜索compile-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<!--将默认jdk版本1.5改为1.7-->
<configuration>
<!--源码版本-->
<source>1.7</source>
<!--编译目标版本-->
<target>1.7</target>
<!--指定编码-->
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
修改配置文件后,刷新工程,右键-->maven-->update projects,看到JRE System Library中变为JavaSE-1.7
-
方法二:
修改全局jdk版本:
在D:JavaEE16.Mavenapache-maven-3.3.9confsettings.xml中修改profiles里的jdk版本为1.7,以后的项目则默认使用1.7来编译。
<profile> <id>jdk1.7</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.7</jdk> </activation> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion> </properties> </profile>
8.6 运行maven工程
-
方式一:
添加tomcat插件,使用插件运行,在pom.xml中:
<!--添加tomcat7插件,以插件方式运行项目--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!--访问端口--> <port>8080</port> <!--项目路径--> <path>/16.1maven</path> <!--设置编码--> <uriEncoding>utf-8</uriEncoding> </configuration> </plugin>
运行步骤:
- 方式二:
直接当作普通的web项目运行即可。右键run as-->run on server。
9. 依赖管理
9.1 添加依赖
添加依赖需要指定依赖jar包的坐标,可通过以下方式查询依赖的坐标:
-
方式一:互联网搜索
以spring core为例:
访问https://mvnrepository.com,搜索spring core,选择版本,复制依赖即可。
或直接百度搜索mvn repository spring
-
方式二:使用maven插件的索引功能
此种方式是从本地仓库中查找。
9.2 依赖作用范围
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<!--l依赖作用范围-->
<scope>provided</scope>
</dependency>
-
compile
编译范围,默认依赖范围,可不写。编译范围的依赖会用在编译,测试,运行,由于运行时需要所以编译范围的依赖会被打包。
-
provided
编译和测试时需要,运行时不需要,防止jar包冲突。如servlet-api运行时tomcat也会提供。
-
runtime
运行和测试时需要。
-
test
测试编译和测试运行时需要。
-
system
与provided类似,但必须提供一个本地系统磁盘中的jar文件的路径,不推荐使用。
10. pom.xml基本配置
pom.xml是maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:
<!--project:文件根节点-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--modelVersion:pom.xml使用的对象模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--groupId:项目名称,一般写项目的域名-->
<groupId>com.itheima.maven</groupId>
<!--artifactId:模块名称,子项目名称-->
<artifactId>16.1maven</artifactId>
<!--version:产品版本号-->
<version>0.0.1-SNAPSHOT</version>
<!--packaging:打包类型-->
<packaging>war</packaging>
<!--name:项目显示名,长用于maven生成的文档-->
<name>maven入门</name>
<!--description:项目描述,长用于maven生成的文档-->
<description>maven入门案例</description>
<!--dependencies:添加依赖包,配置依赖的坐标-->
<dependencies>...</dependencies>
<!--build:项目构建配置,配置编译,运行插件等-->
<build></build>
</project>