Maven 基础

1.1 简介

概念:Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POW);

  1. Maven是用 Java 语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型
  2. Maven 的作用有三个:
  1. 项目构建:提供标准的,跨平台的自动化构建项目的方式;
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题;
  3. 统一开发结构:提供标准的,统一的项目开发结构;

1.2 仓库

概念Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库,用于存储各种资源,包含各种 jar 包;

Maven 仓库有三种类型:

  • 本地仓库:本地仓库是自己电脑上存储资源的仓库,在第一次执行 maven 命令的时候被创建,Maven 所需要的构建是直接从本地仓库进行获取的,如果本地仓库没有,它会连接远程仓库获取资源下载至本地仓库;
  • 中央仓库:中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库,中央仓库包含了绝大多数的开源 Java 构件(不能存储具有版权的资源),由 Maven 团队维护,需要网络才能访问;
  • 私服: 部门或公司范围内存储资源的仓库,用于保存购买的、自主研发的 jar ,仅对内部开放,不对外部开放;

1.3 坐标

概念:Maven 坐标用于描述仓库中资源的位置;

组成

  1. 组织 ID ( groupId ):定义当前 Maven 项目隶属组织名称(通常是域名反写,例如:org.mybatis );
  2. 项目 ID ( artifactId ):定义当前 Maven 项目名称;
  3. 版本号(version):定义当前项目版本号;

作用:坐标是唯一标识,用于唯一位置定位;

资源坐标查询网站:https://mvnrepository.com/

1.4 基本项目构建命令

  • Maven 构建命令使用 mvn 开头,后面添加功能参数,可以用空格分隔一次性执行多个命令:
//编译
mvn compile
//清理
mvn clean
//测试
mvn test
//打包
mvn package
//安装到本地仓库
mvn install

1.5 pom 文件

常用标签:

  • dependencies:设置当前项目所依赖的所有 jar;
  • dependency:设置具体的依赖;
  • optional:可选依赖;
  • exclusions:排除依赖;
  • scope:依赖范围;
  • groupId:所属的项目包;
  • artifactId:所属项目 id ;
  • packaging:打包格式( java 项目为 jar ,web 项目为 war );
  • version:版本号;
  • build:配置;
  • plugins:设置当前项目所依赖的所有插件;
  • plugin:设置具体的插件;
  • configuration:设置当前插件的配置、构造;
  • port:端口号;
  • path:路径;

示例:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <!-- 当前 pom 版本号 -->
 <modelVersion>4.0.0</modelVersion>
 <!-- 项目包名 -->
 <groupId>com.caterpillar</groupId>
 <!-- 项目名称 -->
 <artifactId>web01</artifactId>
 <!-- 打包格式 -->
 <packaging>war</packaging>
 <!-- 项目版本号 -->
 <version>1.0-SNAPSHOT</version>
 <name>web01 Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <!-- 所有依赖 -->
 <dependencies>
 <!--  具体依赖  -->
   <dependency>
     <!--  依赖包名  -->
     <groupId>junit</groupId>
     <!-- 依赖名称 -->
     <artifactId>junit</artifactId>
     <!-- 依赖版本 -->
     <version>4.12</version>
     <!-- 可选依赖 -->
     <optional>true</optional>
     <!-- 依赖范围 -->
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>com.caterpillar</groupId>
     <artifactId>java01</artifactId>
     <version>1.0-SNAPSHOT</version>
     <!-- 所有需去除依赖 -->
     <exclusions>
       <!-- 具体需去除依赖 -->
       <exclusion>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
       </exclusion>
     </exclusions>
   </dependency>
 </dependencies>
 <!-- 配置 -->
 <build>
   <!-- 所有插件 -->
   <plugins>
     <!-- 具体插件 -->
     <plugin>
         <!-- 插件包名 -->
         <groupId>org.apache.tomcat.maven</groupId>
         <!-- 插件名称 -->
         <artifactId>tomcat7-maven-plugin</artifactId>
         <!-- 插件版本 -->
         <version>2.1</version>
       <!-- 构造 -->
       <configuration>
         <!-- 端口 -->
         <port>80</port>
         <!-- 路径 -->
         <path>/</path>
       </configuration>
     </plugin>
   </plugins>
 </build>
</project>

依赖:

  1. 传递性
  • 在当前项目中通过 pom 文件建立的依赖关系叫做直接依赖;
  • 在当前项目的依赖中依赖其他项目,会继承被依赖项目的依赖;
  1. 依赖传递冲突问题

在依赖传递的情况下,出现依赖同一个名称但实际不为同一资源时称为依赖传递冲突问题;

依赖的优先级

  • 路径优先:层级越深,优先级越低,层级越浅优先级越高;
  • 声明优先:配置顺序靠前的覆盖配置顺序靠后的;
  • 特殊优先:为相同资源的不同版本情况下后配置的覆盖先配置的;
  1. 依赖范围

依赖的 jar 默认情况下可以在任何情况下使用,可以使用 scope 标签设定其作用范围;

作用范围
> > > > > > > > > >
scope主代码测试代码打包
compile(默认)可用可用可用
test不可用可用不可用
provided可用可用不可用
runtime不可用不可用可用

1.6 生命周期

maven 对项目构建的生命周期分为 3 套:

  1. clean:清理工作
  • pre-clean:执行一些需要在 clean 之前完成的工作;
  • clean:移除上一次构建所生成的文件;
  • post-clean:执行一些需要在 clean 之后执行的工作;
  1. defaule:核心工作

主要有:

  • compile:编译
  • test-compile:编译测试源码
  • test:测试
  • package:打包
  • install:安装
  1. site:产生报告
  • pre-site:执行一些要在生成站点文档之前完成的工作;
  • site:生成项目的站点文档;
  • post-site:执行一些在站点文档之后完成的工作,并且为部署做准备;
  • site-deploy:将生成的站点文档部署到特定的服务器上;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jc_caterpillar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值