文章目录

  • Maven (项目管理工具)
    • 简介
    • 1、Meven介绍
    • 2、Maven能解决什么问题
      • maven的优点
    • 3、Maven 的依赖管理
    • 4、项目的一键构建
    • 5、构建环节
  • Meven的使用
    • 1、Meven的安装(手动)
      • 1、maven-软件的下载
      • 2、Maven 软件的安装
      • 3、JDK 的准备及统一
      • 4、maven-及-jdk-配置
      • 5、Maven 软件版本测试
      • 6、maven仓库的分类
      • 7、坐标
      • 8、Maven本地仓库的配置
      • 9、Maven-依赖搜索顺序
      • 10、Maven 阿里云(Aliyun)仓库
    • 2、Maven 工程的认识
  • Maven 常用命令
    • 1、compil
    • 2、clean
    • 3、test
    • 4、package
    • 5、install
    • 6、Maven 指令的生命周期
    • idea 开发maven项目
      • idea 的 maven 配置
    • 创建Maven工程
  • 依赖传递
    • 排除传递

Maven (项目管理工具)

简介

Maven 是一个项目管理工具,主要用于 Java 项目的构建、依赖管理和发布。

Maven 的主要功能有以下几点:

  1. 项目构建:Maven 可以帮助你自动地构建项目,包括编译代码、打包、测试等。
  2. 依赖管理:Maven 可以管理项目的依赖,包括依赖的 Jar 包、插件等。
  3. 发布:Maven 可以帮助你将项目发布到远程仓库,供其他人或项目使用。
  4. 报告生成:Maven 可以生成项目的报告,包括代码质量报告、测试报告等。

Maven 的主要优势在于,它能够解决项目依赖的问题,并且提供了一套标准的项目构建流程。使用 Maven 可以让你更加专注于代码的开发,而不用担心项目构建、依赖管理等方面的问题。

1、Meven介绍

Maven这个单词的本意是:专家,内行。读音是[’meɪv(ə)n]或[’mevn],不要读作“妈文”。

Maven 是一个项目管理和整合工具。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于Java平台的项目构建、依赖管理和项目信息管理。

  1. 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
  2. 如何能够让一个东西自动帮我导入和配置这个jar包。由此,Maven诞生了!

(1)问题1:jar包不统一,或jar包不兼容导致的问题;

  1. 比如,我们开发了一个CRM系统(一般指客户关系管理系统),其肯定要用到一些jar包;比如用到了mybatis,log4j等;
  2. 除此之外,我们还能用到【我们同事,开发的一些东西】;比如,同事做了一个财务模块,我们就可能用到;
  3. 假设某天,项目的mybatis需要升级;升级后的mybatis要用5.0版本的Junit,但是,项目原先的Junit是4.0版本的;于是,意识到这个问题的我们,就会去手动升级Junit的版本;
  4. 那么,如果是同事做的那个财务模块升级了呐?那么,如果同事没有通知我们,我们还在这个CRM系统中用旧版本的财务模块;而这,可能导致问题;

(2)问题2:工程升级维护过程中,操作繁琐;

  • 我们把CRM项目开发完了,直接在开发环境打成一个jar包,发给运维,然后运维在生产环境运行即可?:显然不行;这是因为,开发环境和生产环境并不是完全一致的;
  • 我们在Windows上开发的代码,放到Linux系统上编译打包,大概率会出问题;(比如,String.getBytes()方法,在Windows和Linux上的结果就不一样)
  • 所以,一个正确的做法是:把源代码放到生产环境(一般是Linux系统)上,在生产环境中去测试、编译、打包、部署,才能确保OK;
  • 而很显然,在Linux上是不能安装我们开发时常用的IDEA这种图形界面的工具的;而这,就是操作繁琐的问题;

2、Maven能解决什么问题

我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种 必不可少的事情要做,下面列举几个感受一下:

  1. 我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用 到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
  2. 我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的电脑却完全读不懂,需要将它编译成二 进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代 码即时编译。maven可以自动编译。
  3. 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
  4. 再优雅的代码也是要出来盈利的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型 打包,如果是 web 项目,还需要将之发布到服务器。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站 点,Maven 就可以解决上面所提到的这些问题。

maven的优点

  1. 添加第三方 jar 包

JavaEE 开发 。使用 jar 包最简单的方法就是复制粘贴到 WEB-INF/lib 目录下。但是这会导致每次创建一个新的工程就需要将 jar 包重复复制到 lib 目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。

使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成的混乱。

前面我们实现 Web 阶段项目,要能够将项目运行起来,就必须将该项目所依赖的一些 jar 包添加到工程中,否则项目就不能运行。试想如果具有相同架构的项目有十个,那么我们就需要将这一份 jar包复制到十个不同的工程中。我们一起来看一个CRM项目的工程大小。
使用传统 Web 项目构建的 CRM 项目如下:

原因主要是因为上面的 WEB 程序要运行,我们必须将项目运行所需的 Jar 包复制到工程目录中,从而导致了工程很大。

同样的项目,如果我们使用 Maven 工程来构建,会发现总体上工程的大小会少很多。如下图:

小结:以初步推断它里面一定没有 jar 包,继续思考,没有 jar 包的项目怎么可能运行呢?

我们之前的web项目,jar包放在 项目中的lib下,— 会增大项目占用的内存!

Maven项目, jar包不在项目中, 通过坐标去仓库找jar! —– 减小了项目所占用的空间,以及提高了jar利用率;

  1. jar 包之间的依赖关系

jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能够正常工作,我们称之为jar 包之间的依赖关系。最典型的例子是:commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar,如果没有 IO 包,FileUpload 包就不能正常工作。当你的项目中需要用到上百个 jar 包时,你还会人为的,手工的逐一确认它们依赖的其他 jar 包吗?这简直是不可想象的。

而引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来,无需人工参与,节约了我们大量的时间和精力。

  1. 获取第三方 jar 包

JavaEE 开发中需要使用到的 jar 包种类繁多,几乎每个 jar 包在其本身的官网上的获取方式都不尽相同。为了查找一个 jar 包找遍互联网,身心俱疲,没有经历过的人或许体会不到这种折磨。

使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。你只需要在你的项目中以坐标的方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包 。

  1. 将项目拆分成多个工程模块

随着 JavaEE 项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开发很多年对于 JavaEE 项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个 Web工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过package 结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有的是 Web 工程。

上层模块依赖下层,所以下层模块中定义的API都可以为上层所调用和访问。

  1. 处理jar包之间的冲突

上一点说的是jar包不足项目无法正常工作,但其实有的时候jar包多了项目仍然无法正常工作,这就是jar包之间的冲突。

举个例子:我们现在有三个工程MakeFriend、HelloFriend、和Hello。MakeFriend依赖HelloFriend,HelloFriend依赖Hello。而Hello依赖log4j.1.2.17.jar,HelloFriend依赖log4j.1.2.14.jar。如下图所示:

那么MakeFriend工程的运行时环境中该导入log4j.1.2.14.jar呢还是log4j.1.2.17.jar呢?
这样的问题一个两个还可以手工解决,但如果系统中存在几十上百的jar包,他们之间的依赖关系会非常复杂,几乎不可能手工实现依赖关系的梳理。

使用Maven就可以自动的处理jar包之间的冲突问题。因为Maven中内置了两条依赖原则:最短路径者优先和先声明者优先,上述问题MakeFriend工程会自动使用log4j.1.2.14.jar。

3、Maven 的依赖管理

Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。

传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。那么maven 工程是如何使得工程变得很少呢?
分析如下:

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

Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。

我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。

那么问题来了

第一:”存放 jar 包的仓库”长什么样?
第二:通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式不可行!

第一个问题:存放 jar 包的仓库长什么样,这一点我们后期会分析仓库的分类,也会带大家去看我们的本地的仓库长什么样。

第二个问题:通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我们就可以认为可以快速找到 jar 包。

4、项目的一键构建

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

什么是构建?

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

一键构建

指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
Maven 规范化构建流程如下:

5、构建环节

  1. 清理:删除以前的编译结果,为重新编译做好准备。
  2. 编译:将Java源程序编译为字节码文件。
  3. 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  4. 报告:在每一次测试后以标准的格式记录和展示测试结果。
  5. 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
  6. 安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
  7. 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

Meven的使用

1、Meven的安装(手动)

1、maven-软件的下载

为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。通过百度搜索“Maven“如下:

点击 Download 链接,就可以直接进入到 Maven 软件的下载页面:

目前最新版是 apache-maven-3.5.3 版本,当使用的是apache-maven-3.5.2 版本,大家也可以下载最新版本。
Apache-maven-3.5.2 下载地址:http://archive.apache.org/dist/maven/maven-3/
下载后的版本如下:

2、Maven 软件的安装

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 E:\apache-maven-3.6.1 下面。
解压后目录结构如下:

bin:存放了 maven 的命令,比如我们前面用到的mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

3、JDK 的准备及统一

我们所使用工具软件的统一,JDK 使用 JDK8版本

  1. JDK 环境:

4、maven-及-jdk-配置

配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin目录之前一级目录)

上面配置了我们的 Maven 软件,注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和空格。

编辑系统变量 Path,添加变量值:%MAVEN_HOME%\bin`

再次检查 JDK 的安装目录,如下图:

5、Maven 软件版本测试

通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装成功。
找开 cmd 命令,输入 mvn –v命令,如下图:

我们发现 maven 的版本,及 jdk 的版本符合要求,这样我们的 maven 软件安装就成功了。

6、maven仓库的分类

仓库:类似于容器,用于存储资源,主要是各种jar包,比如书包是一个容器,用来存书,衣柜是一个容器,用来存储衣服

说明:

关于仓库,我们前面讲到了有三种:本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库

  1. 中央仓库:jar包,在云端的一台计算机上保存;这台计算机就叫做中央服务器;对应,存储jar包的位置就叫做中央仓库;中央仓库,目前由maven开发团队在维护,里面放着全世界基本99%的jar包;
  2. 本地仓库:我们从中央仓库下载jar包到自己的计算机,那么本地存放(自己下载的)jar包的位置就是本地仓库;当我们在代码中,从本地方库拿东西的时候,如果本地仓库有就直接用了,如果本地仓库没有就会去中央仓库获取;
  3. 私服仓库:为了减轻中央仓库的压力(全世界那么多开发者,如果大家需要jar都从中央仓库拿,那么中央仓库肯定受不了),同时为了方便团队管理,也会设置私服仓库;这样一来,当本地需要某个jar包的时候,就可以从私服仓库拿;私服仓库和本地仓库可能是一个局域网的(比如自己公司内),自然也可能不是一个局域网的;
  4. 私服仓库和中央仓库,称作远程仓库;
  5. 中央仓库中的内容,都是免费、开源的;而那些不开源的,比如,Oracle的驱动jar包就不在中央仓库;所以,我们才说中央仓库放着全世界基本99%(不是100%)的jar包;
  6. 比如,我们公司开发了一个很给力的工具,自然这个工具对应的jar包就不应该放到中央仓库中;如果,自己公司要用,就可以把其放在私服仓库中;(即私服不仅能够提高访问速度,也能够保障版权)

总结:中央仓库:maven团队自身维护的仓库,属于开源的

私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源

本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

私服的作用:

(1)保存具有版权的资源,包含购买或自主研发的jar

(2)一定范围内共享资源,能做到仅对内不对外开放

本地仓库 :用来存储从中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找
默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows 用户目录。

7、坐标

中央仓库地址:https://mvnrepository.com/

我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标

坐标:maven中的坐标用于描述仓库中资源的位置

说明:

**(1)**中央仓库中,存放着大量的资源;;;随着资源越来越多,很显然就遇到了如何有效的查找资源的问题;;;

**(2)**坐标:就是Maven定位仓库中,资源的位置用的;

**(3)**比如,我们可以在maven仓库中,去找我们想要的jar包;https://repo1.maven.org/maven2/

但是,如果我们想找apache下的某个jar包,会发现直接搜搜不到,因为apache的包在org.apache下;

所以,可以发现,Maven仓库中jar的命名层次,还是有点小复杂的;

maven坐标的主要组成如下:

  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;)
  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)
  • version:定义当前资源的版本号

> packaging:定义资源的打包方式,取值一般有如下三种

  • jar:该资源打成jar包,默认是jar java工程打包为jar
  • war:该资源打成war包 web工程打包为war
  • pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构

总结:

maven的坐标,作用就是帮助我们找到对应的资源;;;而,这个坐标不是给程序员用的,而是给maven这个工具用的;;;Maven会根据这个坐标,去仓库中查找资源;

8、Maven本地仓库的配置

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

MAVE_HOME/conf/settings.xml文件中配置本地仓库位置(maven 的安装目录下):

打开 settings.xml 文件,配置如下:

当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。

9、Maven-依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

10、Maven 阿里云(Aliyun)仓库

Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。

![

  • 国内建议使用阿里云的镜像(可以百度搜 maven 阿里云镜像,也可以打开下方链接)

第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        </mirror>
</mirrors>

直接复制资料里面我已经配置好的 settings.xml 文件

2、Maven 工程的认识

现在JavaEE开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而Maven正是因为指定了特定文件保存的目录才能够对我们的Java工程进行自动化构建。

比照着【Maven工程目录结构】,创建一个工程;

hellosrc——main————java————resources——test————java————resourcespom.xmlsrc/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class 文件会输出到此目录
pom.xml——maven 项目核心配置文件

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则

Maven 常用命令

我们可以在cmd 中通过一系列的 maven 命令来对我们的 maven-helloworld 工程进行编译、测试、运行、打包、安装、部署。

Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。

在pom文件所在目录下执行以下命令,即cd project/java-project目录下。

1、compil

(1)在工程的pom.xml所在目录,通过命令行窗口,执行【mvn compile】命令,去编译项目;

compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target目录下。
cmd 进入命令状态,执行mvn compile,如下图提示成功:

查看 target 目录,class 文件已生成,编译完成,编译主要是对src 目录下面的 java代码进行编译

2、clean

(2)上面编译的东西,我们不想要了;执行【mvn clean】命令,去清除编译的内容(也就是target了);

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

3、test

(3)使用【mvn test】命令,去测试所有测试类中的代码;

test 是 maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。

执行命令之后会在target目录下面生成一个 test-classse文件

4、package

(4)使用【mvn package】,进行项目打包;

package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于web 工程打成war包。

package 打包 会编译 src 和 test 目录下面的包,并且打包

查看 pom 文件

5、install

5.使用【mvn install】,将前面打好的jar包(或者是war包)发布到本地仓库;(好处是:当我们把工程安装到本地仓库后,开发的其他项目也就可以引用这个打包好的jar包了);

install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出:
当后面的命令执行时,前面的操作过程也都会自动执行,会自动执行 test ,package , compile,并且会在仓库里面安装刚刚编译的包

进入到本地的仓库查看刚刚安装的包

6、Maven 指令的生命周期

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。

1、clean周期
主要用于清理上一次构建产生的文件,可以理解为删除target目录。
  1)pre-clean:执行清理前需要完成的工作
  2)clean:清理上一次构建生成的文件
  3)post-clean:执行清理后需要完成的工作
命令:mvn clean

2、default周期
主要阶段包括:
  1)process-resources:默认处理src/main/resources/下的文件,将其输出到对应的classpath目录中。
  2)compile:编译src/main/java下的java文件,产生对应的class。
  3)process-test-resources:默认处理src/test/resources/下的文件,将其输出到对应的classpath目录中。
  4)test-compile:编译src/test/java下的java文件,产生对应的class。
  5)test:运行测试用例。
  6)package:打包构件,即生成对应的jar包、war包等。
  7)install:将构件部署到本地仓库。
  8)deploy:部署构件到远程仓库。
命令:
mvn install
mvn package
mvn clean package #调用clean生命周期的clean阶段和default生命周期的package阶段

3、site周期
主要阶段包括:
  1)site:产生项目的站点文档。
  2)site-deploy:将项目的站点文档部署到服务器。
命令:
mvn site

idea 开发maven项目

在实战的环境中,我们都会使用流行的工具来开发项目。

IntelliJ IDEA 已经内建了对 Maven 的支持。

查看 maven 是否安装完成

idea 的 maven 配置

打开 —–> File —–> Settings 配置 maven

依据图片指示,选择本地 maven 安装目录,指定 maven 安装目录下conf文件夹中 settings 配置文件。

我们可以到 http://mvnrepository.com/搜索需要的jar包的依赖信息。
http://search.maven.org/

创建Maven工程

  1. 创建 HelloFriend(旧版)


  1. 在pom.xml配置文件中配置当前工程
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.atuigu</groupId><artifactId>HelloFriend</artifactId><version>1.0-SNAPSHOT</version></project>

主程序 在src/main/java目录下新建文件HelloFriend.java

package com.atguigu;public class HelloFriend {public static void main(String[] args) {Hello hello = new Hello();hello.setName("哈哈");System.out.println(hello);}
}

新建项目maven_web(22版)

双击 pom.xml 文件、

<packaging>war</packaging>

右键main ,新建文件 ,文本框输入 webapp/WEB-INF/web.xml

打开web.xml

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app></web-app>

在webapp文件夹下面新建index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>欢迎使用MAVEN创建WEB项目</h1>
</body>
</html>

使用maven运行程序 ,使用命令 tomcat:run

运行程序请求http://localhost:8080/maven_web/

依赖传递

创建了一个maven工程【project-java】,并且使用了【mvn install】,将前面打好的jar包(或者是war包)发布到本地仓库;(好处是:当我们把工程安装到本地仓库后,开发的其他项目也就可以引用这个打包好的jar包了);

创建项目project01

添加坐标

<dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency>
</dependencies>

创建项目project02

添加坐标

<dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.13</version></dependency>
</dependencies>

创建项目project03

添加坐标

<dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency>
</dependencies>

项目二需要用到项目三里面的东西,修改项目二的pom.xml配置文件

 <dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.13</version></dependency><dependency><groupId>com.atguigu</groupId><artifactId>project03</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

项目二会出现项目三的坐标

项目三添加坐标

<dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>

排除传递

**(1)**对于那些,不归我们控制的依赖,自然可以使用排除依赖;

项目三有一个Junit,项目二不想继承Junit,直接排除


总结:Maven是一个管理工具,在实际开发中,一般只需要配置一遍就可一直使用,Maven的常用命令的话,在idea中也可非常的方便的点击使用,总之,Maven是非常容易的。

每日金句:一无所知的世界,走下去才有惊喜

Maven(保姆级全详)新手入门相关推荐

  1. un系统服务器双网卡,「保姆级教程」unRaid入门到精通七:直通网卡、硬盘和其它PCI硬件设备...

    本章前言: 上一章节讲过unRaid安装NVIDIA驱动独立显卡加速EMBY,详细见<「保姆级教程」unRaid入门到精通六:unRaid安装NVIDIA驱动独立显卡加速EMBY>,本章将 ...

  2. DFS(深度优先搜索算法)入门保姆级超详解

    如题,本篇创作目的在于更精细化理解DFS的运作,篇幅不长,也只是作者的一家之言,只为提供一个对入门者的更精细的解释. DFS,深度优先搜索算法,首先我们看中文,可以很清楚的理解到这个算法是指搜索操作中 ...

  3. 【保姆级教程】2023入门网络安全,从这篇文章开始

    一.黑客攻防实战知识 黑客技术并不是我们想象的那样,专门用来搞事情的.想要在网络安全行业立足,必须知已知彼. 了解一些基础的黑客知识,可以让你看清黑产交易本质,从此不交愚人税,可以与骇客对抗,免遭个人 ...

  4. 【保姆级教程】2022入门网络安全,从这篇文章开始

    一.黑客攻防实战知识 黑客技术并不是我们想象的那样,专门用来搞事情的.想要在网络安全行业立足,必须知已知彼. 了解一些基础的黑客知识,可以让你看清黑产交易本质,从此不交愚人税,可以与骇客对抗,免遭个人 ...

  5. vue项目打包wap2app项目生成apk保姆级教程适合新手看,建议收藏

    一.需要提前准备的有: 1.已部署到云端的网站+域名 2.下载软件HBuilder X, 下载地址官网. 3.创建项目 重要的配置部分来了 二.部分配置修改 问题1:如果你的网站没有事先为顶部预留安全 ...

  6. Springboot 打包神器Maven 保姆级教程

    一.介绍 Maven 是基于项目对象模型 (POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说就是用来管理项目所 ...

  7. github文件上传全流程-新手入门系列

    1.获取网络连接 直接访问github网站是非常慢的,甚至有时可能不能访问,所以需要重新获取网络连接. 使用下面网站:https://tool.chinaz.com/dns/ ->在输入框中输入 ...

  8. 数据库分片教程mysql_MySQL数据库架构全系列新手入门教程

    第1章实例和故事 决定电商11大促成败的各个关键因素. 1-1什么决定了电商双11大促的成败 1-2在双11大促中的数据库服务器 1-3在大促中什么影响了数据库性能 1-4大表带来的问题 1-5大事务 ...

  9. Label Smoothing标签平滑详解+Pytorch保姆级实际操作

    目录 简介 从提出Label Smoothing的论文出发 不使用LS时的情况 不使用LS时可能带来的问题 LS作为正则化的一种方式 具体操作 为何LS可以避免偏激的输出 对LS的另一个角度理解 Py ...

最新文章

  1. POJ2985 The k-th Largest Group(平衡树查询第K大)
  2. 《IP路由协议疑难解析》一1.3 动态路由
  3. windows ftp服务器_ftp客户端软件,推荐6个流行的FTP客户端软件
  4. 如何检测远程主机上的某个端口是否开启
  5. 【2017.11.29 周三 转载之李航博士的文章:大数据分析到底需要多少种工具?】...
  6. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
  7. C#企业级开发案例精解:用经典案例学通 NET技术
  8. C++安全方向(二):2.5 Base58_比特币钱包地址_算法分析
  9. css 修改文字基准线_css外部样式表怎么写
  10. 7-21 魔法优惠券 (25 分)
  11. 2018年java技术面试题整理
  12. androidstudio自动生成变量_Android Studio 安装教程
  13. 知乎7万赞回答:你思考问题的方式,决定了你的层次
  14. 让代码更美:10大编程字体
  15. U盘插入之后有声音但是无法显示打开U盘
  16. lol祖安服务器维护,LOL:最坑的十个大区,艾欧尼亚排第十!如果你在第一赶快换区!...
  17. hdu5238(中国剩余定理+线段树)
  18. 百读不厌《破窑赋》!真正的千古奇文!
  19. 三国皇帝的寡妇秘史(1)
  20. 智慧厕所智能卫生间系统有哪些功能

热门文章

  1. 【记录】谈计算机知识、技术与能力
  2. 智能窗帘研究制作_基于单片机的智能窗帘设计
  3. Solr查询参数wt
  4. DasBlog: 构建一个分布式.NET 协作系统
  5. python的f是什么意思_%f在python中什么意思
  6. 英语语法回顾5——状语和状语从句
  7. 面试题:构造方法中可不可以有return语句呢?
  8. 基于S7–1500的单部六层电梯教程(六)
  9. python 全排列 递归中的两种实现
  10. 计算机网络2:get和post的区别