Maven 清爽教程

//1.Maven介绍

简介

  • 一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些 Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。
    - 可从本地仓库或远程仓库(默认为MvnRepository)中自动导入jar包。
    - 统一jar包资源路径,版本管理,统一项目结构,第三方良好的集成。
    - 通过联网在远程仓库下载的jar包,会存储至本地仓库(C:\Users\用户名.m2)。
    - 是一种XML标记语言。

安装

  • 可以使用指定的Maven版本,或使用 IDEA 自带的Maven(版本3.3.9)。
    - 使用指定的Maven版本:需配置环境变量,第一个变量的变量名为 M2_HOME 或 MAVEN_HOME,值为maven的路径。第二个变量的变量名为 Path,值为%MAVEN_HOME%\bin。
    - 使用 IDEA 自带的Maven版本:无需配置。

目录结构

  • 若要使用Maven,那么项目的目录结构必须符合Maven的规范。
    - project:存放 pom.xml(Maven项目的配置文件) 和所有的子目录。
    - project/src/main/java:存放项目的 java 源代码。
    - project/src/main/resources:存放项目资源文件(如property)。
    - project/src/main/webapp:web 项目的根目录。
    - project/src/test/java:存放单元测试源代码(如JUnit)。
    - project/src/test/resources:存放单元测试资源文件。
    - project/target:存放打包(编译)后的项目文件。

生命周期 (Lifecycle)

  • 清空:clean
    - 验证:validate
    - 编译:compile
    - 测试:test
    - 打包:package
    - 核实:verify
    - 安装,重新下载jar包:install
    - 站点,显示jar包来源:site
    - 部署:deploy

//1.仓库

作用

  • 用来存放Maven管理的所有Jar包。
    - 当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。

分类

  • 本地仓库:本地的Jar包仓库。
    - 中央仓库:官方提供的远程仓库(默认为MvnRepository)。

//2.坐标

作用

  • 是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
    - 添加时,添加至 pom.xml 的 <dependencies></dependencies>

格式

<dependency>
   <groupId>所需Jar包的项目名</groupId>
   <artifactId>所需Jar包的模块名</artifactId>
   <packaging>jar</packaging>
   <version>所需Jar包的版本号</version>
   <scope>test(依赖范围,后面会讲)</scope>
</dependency>

//3.依赖

简介

  • 传递依赖:如果引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用(传递引用)的Jar包都下载到本地。
    - 排除依赖:如果只想下载直接引用的Jar包,那么需要在pom.xml中进行配置。

配置排除依赖

<exclusions>
   <exclusion>
      <groupId>需排除Jar包的项目名</groupId>
      <artifactId>需排除Jar包的模块名</artifactId>
      <packaging>pom</packaging>
      <version>需排除jar包的版本号</version>
   </exclusion>
</exclusions>

依赖范围

  • 在项目发布过程中,帮助决定哪些构件被包括进来。
作用
compile默认范围,用于编译
provided类似于编译,但支持你期待jdk或者容器提供,类似于classpath
runtime在执行时需要使用
test用于test任务时使用
system需要外在提供相应的元素。通过systemPath来取得
systemPath仅用于范围为system。提供相应的路径
optional当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用

依赖冲突

  • 若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
    - 短路优先:本项目—>A.jar—>B.jar—>X1.1.jar、本项目—>C.jar—>1.0.jar。若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X1.1.jar,并且C.jar也引用了X1.0.jar。在此时,Maven只会引用引用路径最短的X1.0Jar。
    - 声明优先:若引用长度相同时,在pom.xml中谁先被声明,就使用谁。

//4.聚合

作用

  • 将多个项目同时运行就称为聚合。

实现聚合

  • 在pom中进行配置:
<modules>
    <module>web-connection-pool</module>
    <module>web-java-crawler</module>
</modules>

//5.继承

作用

  • 在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。
    - 可以通过标签来整合子模块的编译顺序。
    - 可以将一些子项目中共用的依赖或将其版本统一写到父级配置中,以便统一管理。
    - groupId,artifactId,version 可直接继承,减少子项目的 pom 配置。

父pom配置

  • 父级的pom文件只作项目的子模块的整合,在maven install 时不会生成 jar/war 压缩包。
    - 将父级项目的pom.xml文件的packaging配置设为pom。
    - 将需要继承的Jar包的坐标放入标签即可。
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>需继承的Jar包的项目名</groupId>
            <artifactId>需继承的Jar包的模块名</artifactId>
            <packaging>pom</packaging>
            <version>需继承的jar包的版本号</version>
        </dependency> 
    </dependencies>
</dependencyManagement>

子pom配置

<parent>
      <groupId>父pom所在项目的groupId</groupId>
      <artifactId>父pom所在项目的artifactId</artifactId>
      <version>父pom所在项目的版本号</version>
</parent>

//1.pom.xml

打包类型:packaging

  • jar:默认,将所有java文件编译为.class文件,且按照原来的层级结构放置,最终压缩为一个jar文件。一般是内部调用或作为服务使用
    - war:将所有java文件编译为.class文件,且将项目中依赖的所有jar包放在WEB-INF/lib文件夹,最终压缩为一个war文件。一般用于部署
    - pom:聚合、且父类都为pom类型

其他

  • 协议版本:modelVersion
  • 公司名称:name
  • 公司地址:url
  • 依赖集合:dependencies
  • 依赖:dependency

properties

  • 可在其中配置自定义属性。
    - 配置:<属性名>值</属性名>
    - 调用属性的值:${属性名}

作用域:scope

  • compile:默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些 dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布。
    - provided:跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。
    - runtime:表示 dependency 不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。
    - test:表示 dependency 作用在测试时,不作用在运行时。只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    - system:跟 provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在 repository 查找它。

版本号:version

  • SNAPSHOT(快照版本):动态监测 非稳定版本
    - RELEASE(正式版本):根据版本号监测 版本号一致则不更新 稳定版本

打包执行的插件:build

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值