Maven回顾

1.maven是什么?

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

2.Maven 能解决什么问题?

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

1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。(jar包依赖)

2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二 进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代 码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一 个个地去编译,逗电脑玩。(编译) 3、世界上没有不存在 bug的代码,计算机喜欢 bug就和人们总是喜欢美女帅哥一样。为了追求美为 了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。(测试) 4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型 打包,如果是 web项目,还需要将之发布到服务器,供人蹂躏。(部署)

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

3.使用maven,我们要做哪些工作?

1) 下载Maven

为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。官网地址:https://maven.apache.org

2)安装Maven

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 D:\software\maven 下面。 解压后目录结构如下: bin:存放了 maven 的命令,比如我们前面用到的mvn tomcat:run boot:存放了一些 maven 本身的引导程序,如类加载器等 conf:存放了 maven 的一些配置文件,如 setting.xml 文件 lib:存放了 maven 本身运行所需的一些 jar 包 至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

3)配置MAVEN_HOME环境变量

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

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

4)检查JAVA_HOME环境变量,如下图:

5) 测试Maven是否安装成功

通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装 成功。

找开 cmd 命令,输入 mvn –v命令,如下图:

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

6) idea 的 的 maven 配置

4.什么是Maven仓库?

1)Maven 的仓库分为两大类

  • 本地仓库

  • 远程仓库

    中央仓库:https://mvnrepository.com/(全球唯一,速度比较慢)

    私服:私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。(可以Nexus搭建私服 )

    其它公共库:例如http://maven.aliyun.com/nexus/content/groups/public,我们可以通过配置镜像的方式来配置。

2)本地仓库的配置

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

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

5.Maven工程的标准目录结构有哪些内容?

Maven 工程的目录结构

作为一个 maven 工程,它的 src目录和 pom.xml 是必备的。 进入 src目录后,我们发现它里面的目录结构如下:

src/main/java —— 存放项目的.java 文件 src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件 src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类 src/test/resources —— 测试资源文件 target —— 项目输出位置,编译后的class 文件会输出到此目录 pom.xml——maven 项目核心配置文件 注意:如果是普通的 java 项目,那么就没有webapp 目录。

6.Maven 常用命令有哪些?

  • compile

    compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。

    cmd 进入命令状态,执行mvn compile,如下图提示成功:

  • test

    test 是 maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。

  • clean

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

  • package

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

  • install

    install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

    注意事项:当后面的命令执行时,前面的操作过程也都会自动执行。

7.maven工程坐标包括哪几个部分?

每个 maven 工程都需要定义本工程的坐标,坐标是 maven 对 jar 包的身份定义:

groupId:项目名称,定义为组织名+项目名,类似包名

artifactId:模块名称

version:当前项目版本号,snapshot 为快照版本即非正式版本,release为正式发布版本

packaging:打包类型

jar:执行 package 会打成 jar 包 war:执行 package 会打成 war 包 pom :用于 maven 工程的继承,通常父工程设置为 pom

8.Maven常见的依赖范围有哪些?

添加坐标:

添加坐标时需要指定依赖范围,依赖范围包括:

 compile:编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。  provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依 赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。  runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。  test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test范围依赖不会被打包。  system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。

依赖范围由强到弱的顺序是:compile>provided>runtime>test

9.Maven中出现jar包冲突问题,如何解决?

Maven项目中的依赖关系: 直接依赖:A依赖B 间接依赖:A依赖B,B依赖C,A间接依赖C,间接依赖,也称之为传递性依赖。

问题:如果一个项目,同时依赖另外一个jar的不同版本,就可能导致jar冲突问题。这就是传递性依赖的Jar版本冲突问题。

测试代码:

<!--导入相关依赖包-->
<dependencies>
    <!--引入spring-context,它所以来的包都会导入进来-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

	<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
</dependencies>

当jar出现冲突时,有两种做法

  • 1)maven根据上面的两个调解原则,自动处理

  • 2)使用exclusions标签手动,排除不需要的jar

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
        <!--直接排除-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

10.dependencyManagement标签的作用是什么?

面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版 本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定 的版本的为准添加到工程中,此方法在企业开发中常用。 如下的配置是锁定了 spring-beans 和 spring-context 的版本:

还可以把版本号提取出来,使用<properties>标签设置成变量。

注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本 的依赖则需要单独添加<dependencies></dependencies>标签,如下:

上边添加的依赖并没有指定版本,原因是已在<dependencyManagement>中锁定了版本, 所以在<dependency>下不需要再指定版本。

11.你是如何理解继承和聚合的?

通常继承和聚合同时使用。 何为继承? 继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring的版本的等,可以将这些重复的 配置提取出来在父工程的 pom.xml 中定义。 何为聚合? 项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比如:dao、service、web 三个工程最终会打一个独立的war 运行。

12.当下载jar时,由于断网或者连接超时导致无法正常下载,如何解决?

当下载jar的时候,如果断网,或者连接超时的时候,会自动在文件夹中创建一个名为*.lastupdate的文件,当有了这个文件之后,当你再次联网的时候,那么该文件不会再自动联网,必须手动删除,才能正常下载使用。如何删除呢?

使用工具:

如何使用?打开工具

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值