项目管理工具maven

1.什么是maven?

  由于官方文档咬文嚼字,难以理解,这里就不介绍他的说法。(要是想知道,可以问度娘)。

    在我看来,maven就是通过一个配置文件(pom.xml),合理地叙述项目间的依赖关系。但是这种依赖关系不能我们手动去添加,而是通过maven这个工具帮助我们来管理。

2.maven仓库

  通过pom.xml文件就可以获取到相应的jar包。但是这些jai包是哪里来的呢?答案就是仓库。

  仓库分为:本地仓库;第三方仓库;中央仓库。

  本地仓库:Maven会将工程中依赖的jar包从远程仓库上下载到本地的磁盘上进行保存。这个本地文件就是本地仓库。

  第三方仓库:又称为私服,一般是由公司自己设置,只为本公司内部使用(连接私服,需要单独配置)。

  中央仓库:它是maven默认的仓库,由maven自己维护,里面包含了几乎所有需要的jar包。我们项目需要的依赖如果没有,那么会默认从中央仓库中下载。

3.maven  java项目结构

simple
   ---pom.xml  核心配置,在项目的根目录下
   ---src
         ---main
              ---java    java源码目录
              ---resources   java配置文件目录
         ---test
              ---java   测试源码目录
              ---resources  测试配置目录

4.maven  web项目结构

pom.xml   核心配置
    ---src
       ---main
          ---java   java源码
          ---resources  java配置
          ---webapp
              ---WEB-INF
              ---web.xml
       ---test  测试
target   输出目录

5.maven的操作命令

  

编译:mvn compile    main/java目录下编译生成class文件(target目录下)
 
测试:mvn test       test/java目录编译
 
清理:mvn clean      删除target目录,也就是将class文件删除

打包:mvn package    生成压缩文件:java项目就是jar包,web项目就是war包,放在target目录下

安装:mvn install    将压缩文件(jar包或war包)上传到本地仓库

部署|发布:mvn deploy 将压缩文件上传到私服

6.maven的生命周期(重点!!!面试常问!!!)

maven有三套生命周期:

1.clean周期:主要是用来清理本地仓库中上一次构建(jar包或war包)的文件,即删除target目录

2.默认周期(也可以理解为一个项目打包的完整过程):

  2.1 process-resouces  编译资源文件阶段

  2.2 compile 编译java文件,生成class文件
  
  2.3 process-test-resources  将资源文件加载到测试目录下面去

  2.4 test-compile 对编译进行测试,生成测试的class文件

  2.5 test 运行时期的测试

  2.6 package  打包项目,生成对应的jar包或war包

  2.7 install 将生成的包上传到本地仓库

  2.8 deploy 部署|发布包到远程仓库

3.site周期

  3.1 site产生项目的站点文档

  3.2 site-deploy 将项目的站点文档部署到服务器

7.maven的pom.xml文件(重点!!!)

  maven的三个坐标groupId、artifactId、version,这三个坐标是基本坐标,不可或缺。除这三个之外,还有其他的,要理解。

  type:依赖的类型,依赖的是jar包还是war包。(默认为jar)

  optional:标记的依赖是否可选,默认为false,(比如在struts2中内置了log4j,不管struts2中有没有logj,项目都可以正常运行,知识提示的信息多和少的关系,这个时候,就可以用这个属性来决定是否要使用这个。)

.  exclusions:排出传递依赖,解决jar包冲突。(依赖就是A依赖B,B依赖C这种关系。加载A的时候,会把B也加载进来)。

   scope:依赖范围,意思就是通过maven加载进来的jar包作用范围是什么,范围包括编译期,运行期和测试期。

 

8.jar包冲突解决

 这里说一下我在运行项目时总是出现的两个异常,NoSuchMethodError和ClassNotFounfException,如果你的项目出现这两个异常,那95%的可能性是出现jar包冲突了。

 8.1 为什么产生jar包冲突?

  举个例子,假如你引进了Ajar包,然而Ajar包又依赖Bjar包,但是Bjar包的版本较低,那么在编译时期,用的是Ajar包中的方法,在运行时期,两个jar包都会加载,这时候,就会发现Bjar包中没有这个方法,就会报jar包冲突错误。

 8.2 如何解决jar包冲突?

   maven的默认处理方式:1.最短路径优先(就是依赖关系中层级较少的优先加载)

                                           2.最先申明优先(当出现两个不同版本的jar包时,会优先加载先申明的jar包)

  移除依赖:可以借助maven  Helper插件中的Dependency  Analyzer,来分析冲突的jar包,然后在对应标红版本的jar上面点击execlude,就可以将该jar包移除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值