Maven
# 1.Maven简介
Maven的主要功能是,通过在pom.xml的<dependency>
指定要在项目中使用的JAR库名称和版本,可以自动下载在外部站点上集中管理的JAR ,并在本地使用该JAR进行构建可以。
Maven构建项目的优势
在传统的Web项目中,每个项目所需要的jar
包文件都配置在WEB-INF下的lib目录下,如果所需要的jar包文件很多,则项目会很大,关键是jar包可能产生冲突,这才是要命的!web下几十行的报红,对于俺这种菜鸟来说简直是.....Maven的优势就在于能够复用jab包,构建了统一的Web目录结构,方便项目的管理和部署。
Maven 中的有两大核心:
依赖管理:对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库https://mvnrepository.com/ (opens new window),当我们在项目中添加完依赖之后,Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)
项目构建:对项目进行编译、测试、打包、部署、上传到私服等
# 2.Maven安装及配置
安装仓库配置出门左转
【Maven安装配置及在idea中配置】 (opens new window)
Maven目录结构
bin目录下
boot目录
config
lib
# 3.仓库repository
运行原理
运行Maven的时候,Maven所需要的任何构件首先从本地仓库获取。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
关于如何将本地仓库修改到别的盘符,移步链接【Maven安装配置及在idea中配置】 (opens new window)
本地默认仓库位置
C:\Users\YourPC\.m2
创建Maven项目,一定要保持网络畅通,否则一些依赖文件无法下载会导致项目报错!!!
# 4.Maven项目标准目录结构
src/ main / java目录 核心代码部分
src/ main / resources 配置文件部分
src/ test / java目录 测试代码部分
src/ test / resources 测试配置文件
src/ main / webapp页面资源,js,cs,图片等等
# 5.Maven常用命令
mvn -version
:显示版本信息
mvn clean
:将编译过的target文件删除,清除产生的项目
mvn compile
:编译src-main下源代码,并放置到target下
mvn test-compile
:编译测试代码
mvn test
:运行测试src下的代码
mvn package
:打包
mvn install
:打包项目并且安装到本地仓库
mvn:deploy
:发布项目
【idea中集成的mvn命令】
- 创建maven项目:
mvn archetype:generate
- 验证项目是否正确:
mvn validate
- 只打jar包:
mvn jar:jar
- 生成源码jar包:
mvn source:jar
- 产生应用需要的任何额外的源代码:
mvn generate-sources
- 运行检查:
mvn verify
- 生成idea项目:
mvn idea:idea
- 显示maven依赖树:
mvn dependency:tree
- 显示maven依赖列表:
mvn dependency:list
web项目相关命令
- 启动tomcat:
mvn tomcat:run
- 启动jetty:
mvn jetty:run
- 运行打包部署:
mvn tomcat:deploy
- 撤销部署:
mvn tomcat:undeploy
- 启动web应用:
mvn tomcat:start
- 停止web应用:
mvn tomcat:stop
- 重新部署:
mvn tomcat:redeploy
- 部署展开的war文件:
mvn war:exploded tomcat:exploded
# 6.项目对象模型pom.xml
Maven有三个内置的构建生命周期分别为:clean
、default
、site
我们一般使用的是默认的生命周期
Maven 项目,如果需要使用第三方的控件,都是通过依赖管理来完成的。这里用到的一个东西就是 pom.xml
文件,概念叫做项目对象模型(POM,Project Object Model),我们在 pom.xml 中定义了 Maven 项目的形式,所以,pom.xml 相当于是 Maven 项目的一个地图。
这个地图中都涉及到哪些东西呢?
Maven 坐标
dependencies:添加项目需要的 jar 所对应的 maven 坐标
dependency:一个 dependency 标签表示一个组件的坐标
groupId:公司名
artifactId:相当于在一个组织中项目的唯一标识符。
version:一个项目的版本
scope:表示依赖范围
jar包冲突问题
maven所需要的jar包存放在本地仓库,但是在我们使用jsp
、servlet
时,项目有可能不识别HttpServlet
而报红,此时我们导入相关依赖到 pom.xml 中,虽然解决了问题。但是将跑起来之后,会出现jar包冲突的问题...
这是为什么呢?
因为在本地仓库中和此项目中,出现了两个相同的重名jar包文件,本地项目中有servlet包,但是由于编译器不识别我们又导入了一份servlet包,导致冲突。
所以为了解决这样的问题,需要在冲突的jar包文件上加上作用域provided
,让它只在编译时起作用
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope><!--只在编译时起作用-->
</dependency>
2
3
4
5
6
7
8
9
10
pom.xml参考
【参考文章】