maven教程

1、maven简介

什么是maven
主要服务于java平台的项目构建,依赖管理和项目信息管理。

什么是构建
除了编写代码,我们还需要编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工作上,这就是构建。

maven的优势
1、跨平台。

2、服务于构建,能帮我们自动化构建过程,从清理、编译、测试,到生成报告,再到打包和部署。

3、标准化
maven能帮助我们标准化构建过程。在maven之前,10个项目可能有10种构建方式,有了maven后,所有项目的构建命令都是简单一致的,这极大避免了不必要的学习成本,而且有利于促进项目团队的标准化。

4、依赖管理工具
maven为java开发者提供了中央仓库,每个jar包都有唯一确定的标识。

学习maven的资料
许晓斌 maven书籍

安装配置好maven后,一般只需要修改settings.xml文件的本地仓库的地址<localRepository>D:/maven/repository</localRepository>

pom文件中的 scope 作用范围
<scope>test</scope>

仓库分为:

  • 中Yang仓库:包含了大部分的jar包
  • 本地仓库
  • 私服

maven的本地仓库:

  • 默认:C盘—.m2—repository
  • 设置:settings.xml <localRepository>标签

2、版本号

  • X.X.X-里程碑
  • 第一个X:大版本,有重大变革
  • 第二个X:小版本,修复bug,增加功能
  • 第三个X:更新
  • 里程碑:snapshot(快照,开发版)
  • alpha:内部测试
  • beta:公开测试
  • release:发布版,release candidate
  • GA:正常版本

3、jar 包的坐标详解

  • groupId(组织):定义项目属于哪个组,这个组往往和所在的组织和公司存在关联
  • artifactId(项目):定义maven项目在组中唯一的id,比如spring-aop
  • version:定义maven项目当前所处的版本
  • packaging:定义maven项目的打包方式,打包方式通常与所生成构建的文件扩展名对应,maven默认的打包方式是jar,也可以是war
  • classifier:定义构建输出的一些附属构件,比如javadoc和sources.jar,这是java文档和源代码

4、mvn命令

  • mvn -v

  • 创建maven的普通java项目
    mvn archetype:create -DgroupId=packageName -DartifaceId=projectName

  • 创建maven的web项目
    mvn archetype:create -DgroupId=packageName -DartifaceId=webappName -DarchetypeArtifactId=maven-archetype-webapp

  • 编译源代码 mvn compile

    • 下载jar包,先在本地仓库中查找有没有jar包,没的话,去远程仓库(私服、中Yang仓库)中下载
    • 产生target文件夹,.java文件compile后生成的.class文件
  • 编译测试代码 mvn test-compile

  • 运行测试 mvn test

  • 产生site mvn site

  • 打包 mvn package

  • 在本地仓库中安装jar mvn install

  • 清除产生的target文件夹 mvn clear

  • 生成idea项目 mvn idea:idea

  • 只打包不测试mvn -Dtest package

  • 编译测试的内容 mvn test-compile

  • 只打jar包 mvn jar:jar

  • 只测试,不编译,也不测试编译 mvn test -skipping compile -skipping test-compile

  • mvn clear:清除target

  • mvn test:测试用例是否成功

  • mvn clear test:清除target后,test

  • mvn package:把项目打包成jar包

  • mvn clean install:清除target后,生成jar包,然后把jar安装到本地仓库

    • build
    • test
    • jar

5、依赖

依赖范围是用来控制依赖与这3种classpath(编译classpath、测试classpath、运行时classpath)的关系,maven有以下几种依赖范围:

  • compile:编译依赖范围,如果没有指定,默认使用该依赖范围,对于编译、测试、运行都有效
  • test:测试依赖范围,只在测试的时候需要,比如:junit
  • provided:已提供依赖范围,使用此依赖范围的maven依赖,对于编译和测试有效,运行时无效。典型例子 servlet-API,编译和测试项目需要,但是运行项目时,由于容器已经提供,就不需要maven重复地引入一遍
  • runtime:运行时依赖范围,对于测试和运行有效,对于编译无效,典型例子 jdbc 驱动程序,项目代码的编译只需要 jdk 提供的 jdbc 接口,只有在测试和运行时才需要实现上述接口的具体 jdbc 驱动
  • system:系统范围依赖,一般不适用

依赖传递性:
传递依赖机制,让我们在使用某个 jar 的时候,就不用去考虑它依赖了什么,也不用担心引入多余的依赖,maven 会解析各个直接依赖的pom,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。

传递依赖可能有冲突:

  • 冲突场景1:
    • a–>b–>c(1.0)
    • a–>f–>c(2.0)

如果 a 下同时存在两个不同 version 的 c,冲突!

解决办法:第一声明者优先

  • 冲突场景2:
    • a–>b–>c–>d(1.0)
    • a–>f–>d(2.0)

解决办法:路径最近者优先

  • 冲突场景3:如果pom文件中,引用了2和不同版本的jar包,那么第二个会覆盖掉第一个

其他解决冲突的方法:排除依赖

在这里插入图片描述

6、聚合和继承

在这里插入图片描述
聚合和继承的packaging都是pom <packaging>pom</packaging>

聚合:就是把多个artifactId统一放到聚合项目中,当执行clean、compile、install、package等命令时,所有的 artifactId 都会执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值