maven基础梳理

maven简介

  • maven是apache下的一个开源项目,是纯java开发,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理,并且只是用来管理java项目。

项目构建

项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署的过程。


下面对比一下传统java web项目的构建与maven构建web项目的区别。

1、传统构建方式:

传统项目的构建流程

结合上图传统项目的构建过程可分为一下4步(以eclipse工具为例):

(1)在eclipse中新建java web工程。

(2)在工程中编写源代码及配置文件。

(3)对源码进行编译,将java文件编译成class文件。

(4)执行Junit单元测试。

(5)将工程打成war包部署在tomcat服务器运行。

2、maven构建方式:

maven将项目构建的过程进行了标准化(即生命周期方式),每个阶段使用了一个命令完成,如下图所示:

maven构建过程

上图各个阶段对应的命令如下:

(1)清理对应maven中clean,清理输出的class文件(下文会说明)。

(2)编译阶段对应maven中的compile,即将java文件编译成class文件。

(3)打包阶段对应maven中的package,java工程可以打包成jar,web工程可以打包成war,同时还可以打包成pom形式(项目整合)。

(4)部署阶段,maven中在本地开发过程中提供了一个便携式部署方式,执行tomcat:run命令即可。

3、目录对比说明

maven工程具有一定的目录规范,即:

  • src/main/java ------ 存放项目的.java文件。

  • src/main/resources-------存放项目的资源文件,如spring,hibernate的配置文件。

  • src/test/java------存放所有单元测试.java文件,如Junit测试类。

  • src/test/resources-------测试资源文件。

  • target--------------项目输出目录,编译后的class文件,及测试结果以及打包程序等。

  • pom.xml---------------maven项目核心配置文件。

maven项目目录

传统项目目录

依赖管理

​ 什么是依赖?本人理解为:一个java项目会使用第三方的jar包才能运行,则该java项目依赖于这些第三方的jar包。例如:一个crm项目,项目用到SSH框架, 则该crm项目依赖SSH框架,具体依赖于Struts2、Hibernate、Spring。

​ 依赖管理就是对项目开发过程中依赖的jar包进行规范化管理。

  • 传统项目工程要管理项目开发过程中用到的所有jar包(人工完成)。开发者需要从互联网下载所需的各种jar包导入到需要的项目中(WEB-INF下的lib目录),如下图:
    传统项目依赖过程

  • maven项目所依赖的kar包不需要手动向工程中添加,只需要在pom.xml文件中添加主要的jar包配置即可,有maven工具自动来管理所需要的工具包(包括后续的编译、运行、打包)。如下图所示:

maven管理项目依赖

常用的maven命令

在cmd下应用

  • mvn compile 作用:将src/main/java下的文件编译为class文件输出在target目录下(注意src/test/java目录下的文件不进行编译,开发过程注意根据功能划分目录)。

  • mvn test 作用:执行src/test/java下的测试类。

  • mvn clean 作用:删除target目录下的内容。

  • mvn package 作用:针对java工程则将工程打成jar包,针对web工程则将工程打成war包。

  • mvn install 作用:将项目打成jar包或者war包并发布到本地仓库。

  • mvn deploy 作用:将最终生成的包复制到远程仓库。

注意:maven命令可以拼接使用,如:mvn clean compile

生命周期说明

maven对于项目构建过程分为三套相互独立的生命周期,分别是:

  • Clean Lifecycle 在进行真正的构建之前对项目进行清理工作。
  • Default Lifecycle 项目构建的核心部分,编译,测试,打包,部署等等。(常用)
  • Site Lifecycle 生成项目报告,站点等信息。
理解maven的作用范围
  • compile(编译),即编译是需要,测试时需要,运行时需要,打包时需要 ,可以参照spring包的使用。

  • provided,即编译时需要,测试时需要,运行时不需要,打包时不需要,可以参照servlet-api的使用。

  • runtime,即编译时不需要,测试时需要,运行时需要,可以参照数据库驱动包的使用。

  • test,即编译时不需要,测试时需要,运行时不需要,打包是不需要,可以参照Junit的使用。

注意:默认scope属性值为compile。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值