Maven详解

Maven简介

什么是Maven

Maven在美国是一个口语化的词汇,代表专家、内行的意思。
一个对maven比较正式的定义是这样讲的

Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段中插件(plugin)目标的逻辑 。

maven能解决什么问题

可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:

  1. 我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
  2. 我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成 Eclipse、IDEA 等都可以将代码即时编译。
  3. 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
  4. 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,进行打包。如果是 web 项目,还需要将之发布到服务器 。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗? Maven 就可以解决上面所提到的这些问题。

maven的两个核心功能

依赖管理
  • 传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。
  • maven项目中不直接将jar包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于“存放jar包仓库"(Maven仓库)找到相应的jar包。
    在这里插入图片描述
项目的一键构建
  • 我们开发的项目,往往都要经历编译、测试、打包、安装,部署等一系列过程。
  • 什么是构建项目
    指的是项目从编译、测试、打包、安装,部署整个过程都交给maven进行管理,这个过程称为构建。
  • 一键构建
    指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。

Maven仓库

在这里插入图片描述

  1. 本地仓库
    仓库在本地磁盘上.项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(联网)去下载 jar 包,保存在本地仓库(在程序员的电脑上),第二次不需要从远程仓库去下载。
  2. 远程仓库
    • 中央仓库
      仓库中jar由专业团队(maven团队)统一维护。
      中央仓库的地址:http://repo1.maven.org/maven2/
      此网站打开极慢,下载就更别提了.我们使用的时候一般会使用阿里云镜像(把中央仓库上的jar包都下载过来,做成国内服务器)
    • 私服
      在公司内部架设一台私服,提供仓库服务。
    • 第三方仓库

总结:我们编写项目的时候使用到的jar包,优先去本地仓库去查找,若本地有,直接引用使用;若本地没有,看没有是没有私服,若有私服找私服要jar包,若没有私服,去中央仓库或者阿里云镜像上下载即可;
私服存在的话,私服上没有的jar包,也会去中央仓库或者阿里云镜像上下载

Maven使用

1.下载和安装

  • 下载
    Maven官网下载地址 :http://maven.apache.org/download.cgi
  • 安装
    Maven使用java语言开发的,直接解压即可,放到无中文,无空格的目录下
  • 目录
    bin:存放了 maven 的命令,比如 mvn tomcat7:run
    boot:存放了一些 maven 本身的引导程序,如类加载器等
    conf:存放了 maven 的一些配置文件,如 setting.xml 文件
    lib:存放了 maven 本身运行所需的一些 jar 包
  • 环境变量
    MAVEN_HOME: maven安装目录(bin目录的上一级目录) 例如:D:\javaTools\apache-maven-3.3.9
    path中添加: %MAVEN_HOME%\bin
    注意:maven依赖 JAVA_HOME
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.配置本地仓库

  • 将repository.zip 解压到非中文及特殊符号目录下
    在这里插入图片描述
  • 修改 maven的安装目录/conf/settings.xml 文件的标签,最后保存配置文件
    本地仓库地址
    在这里插入图片描述

3.配置阿里云镜像

为了提高下载jar的速度,建议大家配置好 阿里云镜像(中央仓库的镜像)
在maven的setting.xml中进行配置

 <mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

在这里插入图片描述

Maven工程目录结构

  • web项目结构
web项目目录(文件夹)
	|
	|-- pom.xml(核心配置文件,包含了项目坐标信息,依赖的jar包的坐标等)
	|-- src(存放源代码和配置文件的目录)
			|
			|-- main(主要目录)
					|
					|-- java(存放java源代码目录)
					|-- resources(存放资源目录--配置文件)
					|-- webapp(存放web资源目录)
							|
							|-- 静态资源目录(html,js,img,css等等)
							|-- WEB-INF
									|
									|-- web.xml(核心配置文件)
			|-- test(测试代码和测试文件的目录 不是必须的)	
					|
					|-- java(存放测试的java源代码目录)
					|-- resources(存放测试额外需要资源目录--配置文件)

Maven常用命令

1.常用命令

我们可以在 cmd 中通过一系列的 maven 命令,来对我们的工程进行编译、测试、打包、安装、部署。

* clean
		maven工程的清理命令,执行clean会删除target目录及内容。
		以后大家拿到别人的maven的项目的时候,第一个操作
* compile
		maven工程的编译命令,主要作用是将 src/main/java 下的文件编译为class文件输出到target目录下。
		也会将src/main/resources下的配置文件复制到target目录下
        
* test
		maven工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为class文件,且运行所有的测试类。
		还执行了compile命令
		
* package
		maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
        还会执行test命令
		
* install
		maven工程的安装命令,执行install将mave工程打成jar包或war包,并发布到本地仓库。
        还会执行package命令

2.生命周期

1. Clean Lifecycle
		在进行真正的构建之前进行一些清理工作。
		clean
2. Default Lifecycle
		构建的核心部分,编译,测试,打包,部署等等。
		compile test package install deploy
3. Site Lifecycle
		生成项目报告,站点。 
		site 几乎不用

3.概念模型

在这里插入图片描述

* 项目对象模型 (Project Object Model) 
		一个maven工程都有一个pom.xml文件,用来定义项目的坐标、项目依赖、项目信息、插件目标等。
		
* 依赖管理系统(Dependency Management System) 
		通过maven的依赖管理对项目所依赖的jar包进行统一管理。 
		
* 一个项目生命周期(Project Lifecycle) 
		使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程
		maven将这些过程规范称为一个生命周期。
		
* 一组标准集合 
		maven将整个项目管理过程定义一组标准
		比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。 
		
* 插件(plugin)目标 
		maven管理项目生命周期过程都是基于插件(jar)完成的。

pom.xml文件:
在这里插入图片描述
在这里插入图片描述

idea创建maven工程

必须先配置:

  1. 全局配置,以后每次创建项目都会使用全局的配置
  2. 某个工程局部配置:先创建的,没有使用maven的全局配置,就需要局部配置一下

1.idea集成maven

全局设置

在这里插入图片描述
在这里插入图片描述
为了避免使用骨架创建项目太慢和控制台打印中文出现乱码,需要在runner中配置:
-DarchetypeCatalog=internal -Dfile.encoding=GB2312
在这里插入图片描述

局部配置

进入file–>settings–>build–>build tools–>Maven中,设置maven工具和本地仓库
在这里插入图片描述
进入file–>settings–>build–>build tools–>maven–>Runner中设置 `-DarchetypeCatalog=internal -Dfile.encoding=GB2312
在这里插入图片描述

2.创建maven项目

不使用骨架默认创建的就是se项目。
把se项目变成web项目

  1. 在pom文件中添加packing标签,指定标签值为 war
  2. 在main目录下创建webapp目录及其对应的子目录和文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.配置插件

maven内置的jdk5版本,但是我们现在公司中一般常用的jdk8,所以呢,我们得指定一下jdk的版本信息

  • jdk插件
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
        <!--源代码使用的开发版本-->
		<source>1.8</source>
        <!--生成的目标class文件的编译版本-->
		<target>1.8</target>
		<encoding>utf-8</encoding>
	</configuration>
</plugin>

或者

 <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  • tomcat插件
    maven中集成了tomcat6,但是tomcat6不支持注解开发,所以不一般用内置了.我们可以配置tomcat7插件,使用tomcat7启动项目.也可以使用本地的tomcat(之前的方式)来启动项目.注意tomcat8解决了get请求的中文乱码问题。
    在这里插入图片描述
    在这里插入图片描述

4.配置模板

为了方便在maven中配置jdk版本和tomcat7插件,可以建议将上面的配置信息配置成模版,到时候就可以直接使用快捷键配置信息了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.jar包依赖范围

项目中的jar包如果很多,就可能出现jar包冲突。比如:web应用里有servlet-api的jar包,web在Tomcat里运行也有servlet-api的jar包,那么在Tomcat启动时,就可能出现jar包冲突的问题为了避免这种情况的发生,Maven为每个依赖提供了作用范围,即:依赖范围。

  • compile 默认依赖范围,作用域在编译、测试、运行时都有效。
  • test 作用域在测试时有效。编译和运行时不需要,比如:Junit。
  • provided 作用域在编译、测试时有效。运行时不需要,比如: servlet api 被 tomcat 容器提供。
  • runtime 作用域在测试、运行时有效。编译时不需要,比如:jdbc的驱动包。

在这里插入图片描述记住一句话:当我们在项目中使用jsp和servlet的时候,请设置它们的scope为provided
在这里插入图片描述
默认值都是compile

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值