Maven&Nexus入门

笔记根据此视频完成

原文链接

个人博客链接:https://www.qingbo1011.top/ 点击此处前往

Maven

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

菜鸟教程

Maven万余字教程

Maven 是一个项目管理工具,它包含着:

  • 一个项目对象模型 (POM:Project Object Model)
  • 一组标准集合
  • 一个项目生命周期(Project Lifecycle)
  • 一个依赖管理系统(Dependency Management System)
  • 用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑

视频讲解

Maven优势举例

Maven&Nexus入门_第1张图片

举个例子:

Maven&Nexus入门_第2张图片

Maven&Nexus入门_第3张图片

Maven的两个重要作用

  • 依赖管理
  • 项目的一键构建

依赖管理

Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。

依赖管理:Maven过程对jar包的管理过程

Maven&Nexus入门_第4张图片

maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。

项目的一键构建

我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。

构建:项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个
过程称为构建

一键构建:整个构建过程,使用 maven 一个命令可以轻松完成整个工作

Maven&Nexus入门_第5张图片

Maven安装

Maven的安装、环境变量配置以及配置文件的相关修改网上有很多教程

Maven仓库

maven 的工作需要从仓库下载一些 jar 包。比如说:本地的项目 A、项目 B 等都会通过 maven软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

Maven的三种仓库:

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
    优先从本地仓库查找(默认本地仓库位置在 ${user.dir}/.m2/repository${user.dir}表示 windows 用户目录)
  • 私服仓库(远程仓库):一般来说是公司内部搭建的 Maven 私服,处于局域网中,访问速度较快,这个仓库中存放的 jar 一般就是公司内部自己开发的 jar。如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载()
  • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。(一般我们要再setting.xml文件中将地址修改为阿里云镜像地址

jar包查找仓库顺序:

Maven&Nexus入门_第6张图片

Maven&Nexus入门_第7张图片

全局 setting 与用户 setting:maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置用户配置

在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project项目,它作为 maven 的全局配置

如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user.dir} /.m2/settings.xml 目录中,${user.dir} 指 windows 中的用户目录。

maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

菜鸟教程

构建配置文件大体上有三种类型:

类型 在哪定义
项目级(Per Project) 定义在项目的POM文件pom.xml中
用户级 (Per User) 定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml)
全局(Global) 定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml)

Maven工程目录结构

Maven工程标准目录结构如下:

Maven&Nexus入门_第8张图片

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的

进入 src目录下的目录结构如下:

Maven&Nexus入门_第9张图片

  • src/main/java:存放项目的.java 文件
  • src/main/resources:存放项目资源文件,如 spring, hibernate 配置文件
  • src/test/java:存放所有单元测试.java 文件,如 JUnit 测试类
  • src/test/resources:测试资源文件
  • src/main/webapp:页面资源,js,css,图片等等
  • target:项目输出位置,编译后的 class 文件会输出到此目录
  • pom.xml:maven 项目核心配置文件

注意:如果是普通的 java 项目,那么就没有 webapp 目录

Maven常用命令

30 个常用 Maven 命令

视频讲解

Maven 中有一些常见的命令(如果使用 IDEA 的话,可以不用命令,直接点点点就可以了):

常用命令 中文含义 说明
mvn clean 清理 这个命令可以用来清理已经编译好的文件
mvn compile 编译 将 Java 代码编译成 Class 文件
mvn test 测试 项目测试
mvn package 打包 根据用户的配置,将项目打成 jar 包或者 war 包
mvn install 安装 手动向本地仓库安装一个 jar
mvn deploy 上传 将 jar包(或war包)上传到私服

Maven&Nexus入门_第10张图片

这里需要注意的是,这些命令都不是独立运行的,它有一个顺序。举个简单例子:

我想将 jar 上传到私服,那么就要构建 jar,就需要执行 package 命令,要打包,当然也需要测试,那就要走 mvn test 命令,要测试就要先编译…因此,最终所有的命令都会执行一遍。不过,开发者也可以手动配置不执行某一个命令,这就是跳过。一般来说,除了测试,其他步骤都不建议跳过。

Maven生命周期

菜鸟教程

视频讲解

Maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

  • Clean Lifecycle(清理生命周期):在进行真正的构建之前进行一些清理工作
  • Default Lifecycle(默认生命周期):构建的核心部分,编译,测试,打包,部署等等
  • Site Lifecycle(站点生命周期):生成项目报告,站点,发布站点

Maven&Nexus入门_第11张图片

Maven概念模型

Maven概念模型图

视频讲解

上面已经说到了:

Maven 是一个项目管理工具,它包含着:

  • 项目对象模型 (POM:Project Object Model):每个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。

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

  • 项目生命周期(Project Lifecycle):使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期。maven 通过执行一些简单命令即可生命周期的各个过程,比如执行 mvn compile 执行编译、执行 mvn clean 执行清理。

  • 依赖管理系统(Dependency Management System):通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,在pom.xml中进行依赖定义如下:

    <

你可能感兴趣的:(Maven,maven)