maven 基础

坚强是说给别人听的谎言 提交于 2020-01-12 13:57:55

maven 概述

Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

项目对象模型 (POM:Project Object Model):一个 pom.xml 文件

标准集合:maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。

项目生命周期:使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期

依赖管理系统:通过maven的依赖管理对项目所依赖的jar 包进行统一管理。

插件目标:maven 管理项目生命周期过程都是基于插件完成的。

maven 作用

我们在项目开发不仅仅是写代码,还会有一些必不可少的繁琐的工作,而 maven 这一项目管理工具,可以帮我们构建工程管理 jar 包编译代码,还能帮我们自动运行单元测试打包生成报表,甚至能帮你部署项目生成Web站点,除了以上这些功能,maven 项目的 jar 包由于不在项目当中,从而使得项目体积在很大程度上缩小。下面我们介绍 maven 最重要的两个作用:

管理 jar 包(依赖管理)

maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,在需要用到jar包的时候,只要查找pom.xml文件,通过 pom.xml文件中的坐标,到 maven 仓库中找到 jar 包,再把这些jar包拿去运行即可

构建工程

我们的项目,都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。而 maven 项目的一键构建指的是以上整个过程都交给 maven 进行管理。

maven 仓库

本地仓库:本地文件夹,项目中使用的 jar 包和插件优先从本地仓库找,如果没有则从远程仓库或者中央仓库下载,第二次使用则不需要下载,此时本地仓库已有,因此本地仓库也可以理解为缓存

远程仓库:在互联网或局域网内

中央仓库:在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

maven 常用命令(cmd)

以下命令需要进入项目目录运行,即有 pom.xml 文件的目录

  1. maven 项目运行命令:mvn tomcat:run

  2. clean 清理 mvn clean

    清除目标目录中的生成结果

  3. compile 编译:mvn compile

    将src/main/java下的文件编译为class文件输出到target目录下。

  4. test 测试:mvn test

    执行mvn test执行src/test/java下单元测试类

  5. package 打包 mvn package

    java 工程打包成 jar 包,web 工程打包成 war 包

  6. install 安装 mvn install

    执行 install 将 maven 打包成 jar 包或者 war 包发布到 maven 本地仓库

  7. deploy

    maven 的 web 项目部署到 maven 私服仓库(远程服务器)

当后面的命令执行时,前面的操作过程也会自动执行

maven 生命周期

maven 有三套相互独立的生命周期:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle 生成项目报告,站点,发布站点。

pom 基本配置

pom.xml是Maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:

  • <project>:文件的根节点
  • <modelversion> : pom.xml使用的对象模型版本
  • <groupId> :项目名称,一般写项目的域名(公司或组织域名的倒序)
  • <artifactId> :模块名称,子项目名或模块名称
  • <version> :产品的版本号
  • <packaging>:打包类型,一般有jar、war、pom 等
  • <name> :项目的显示名,常用于 Maven 生成的文档
  • <description> :项目描述,常用于 Maven 生成的文档
  • <dependencies> :项目依赖构件配置,配置项目依赖构件的坐标
  • <build>:项目构建配置,配置编译、运行插件等

如何添加坐标

  1. 在本地仓库中搜索
  2. 互联网上搜,推荐网址 http://www.mvnrepository.com/(https://search.maven.org/

依赖范围

  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
  • provided:provided 依赖只有在当JDK或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。
  • runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
  • test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以 test 范围依赖不会被打包。
  • system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 jar 文件的路径,需要指定 systemPath 磁盘路径,该依赖不推荐使用。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!