zoukankan      html  css  js  c++  java
  • Maven ==> 简介

    一、什么是Maven

      Maven是基于 POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的一个跨平台的项目管理工具。Maven主要有两大功能:管理依赖、项目构建

    二、Maven的安装配置

    下载

    http://maven.apache.org/download.cgi

    安装过程直接解压即可

    配置环境变量

    然后在Path中添加 %MAVEN_HOME%in

    测试

    在命令行窗口输入:mvn -v 或 mvn -version

    配置Maven

    1、全局配置

      在 Maven 安装目录的 conf 里面有一个 settings.xml 文件,这个文件就是 Maven 的全局配置文件。settings.xml文件中设置包含本地仓库路径、远程仓库服务器地址等配置信息。

    2、用户配置

      用户配置文件的地址:~/.m2/settings.xml,该文件默认没有,需要将全局配置文件拷贝一份到该目录下。如果用户配置文件不存在,则使用全局配置文件的配置。

    三、Maven 命令

    Maven 命令要在 pom.xml 所在目录中去执行

    • mvn compile
      • 编译;
      • 完成编译后,会生成target目录,该目录中存放了编译后的字节码文件;
    • mvn clean
      • 清除命令,清除已经编译好的class文件,具体说清除的是target目录中的文件;
      • 执行完毕后,会将target目录删除;
    • mvn test
      • 测试命令,该命令会将test目录中的源码进行编译;
      • 执行完毕后,会在target目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件);
    • mvn package
      • 打包;
      • 执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war;
    • mvn install
      • 安装命令,会将打好的jar包发布到本地仓库;
      • 执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用;
    • mvn clean compile
      • 组合指令,先执行clean,再执行compile,通常应用于上线前执行,清除测试类;
    • mvn clean test
      • 组合指令,先执行clean,再执行test,通常应用于测试环节;
    • mvn clean package
      • 先执行 clean,再执行 package,将项目打包,通常应用于发布前;
    • mvn clean install
      • 先执行clean,再执行install,将项目打包然后发布到本地仓库当中;

    四、Maven的核心概念

    1、坐标

      在 Maven 中,坐标的作用就是定位一个唯一确定的 jar 包。Maven世界拥有大量构建,通过坐标,我们就能从 Maven 仓库中引用指定的 jar 包进行构建。

    Maven 坐标的组成

    • groupId:定义当前Maven的组名
    • artifactId:定义当前项目名称
    • version:定义当前项目的版本

    2、依赖管理

    依赖范围

    依赖范围用 scope 标签来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

    • compile:默认编译依赖范围,对于编译、测试、运行三种 classpath 都有效;
    • test:测试依赖范围,只对于测试 classpath 有效;
    • provided:已提供依赖范围,对于编译、测试的 classpath 都有效,但对于运行无效。例如:由于容器已经提供,所以运行时不需要,如 servlet-api;
    • runtime:运行时依赖范围,例如:jdbc驱动;

    依赖传递

    某项目工程下有A、B、C三个模块,B模块依赖A模块,C模块依赖B模块,那么B模块是C模块的直接依赖,A模块是C模块的间接依赖。也就是说:

    • C直接依赖B
    • C间接依赖A

    我们分别在C模块和B模块的 pom.xml 文件中加入如下配置:

    <dependencies>
        <dependency>
            <groupId>com.test.maven</groupId>
            <artifactId>B</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    POM--C
    <dependencies>
        <dependency>
            <groupId>com.test.maven</groupId>
            <artifactId>A</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    POM--B

    从上图可以看出,虽然C没有直接依赖于A,但是通过简介依赖,C也可以调用A中的类和方法;

    然后我们在A模块的 pom.xml 文件中引入 Junit4.12,如下:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    POM--A

    可以看到:当 scope 标签中的值为 compile 时,直接依赖和间接依赖的模块都能使用。

    总结:

    • 当A范围是compile的时候,B和C能够使用。
    • 当A的范围是test的时候,B和C不能使用。
    • 当A的范围是provided的时候,B和C不能使用;
    • 当A的范围是runtime的时候,B和C能够使用;

    依赖冲突

    跨 Pom 文件的冲突

    A模块的 Pom文件中依赖了 Junit 4.12版本,而B模块的 Pom文件中依赖了Junit 4.10版本,那么B 和 C都将使用 Junit 4.10版本,如下图:

    同一个 Pom 文件的冲突

    B模块的 Pom文件中依赖了Junit 4.10 和 Junit 4.12两个版本,则以放在下面的版本为准,就近原则。

    可选依赖

    Optional标签标示该依赖是否可选,默认是false,表示该依赖会传递下去,如果为true,则表示不会传递下去。

    排除依赖

    在 C模块的 Pom 文件中加入 Exclusions 标签排除 Junit 依赖

    3、继承

    如果所有模块都需要用到某个 jar 包,我们只需要在工程那一级别的 Pom文件中设置即可。

    把 A、B、C的依赖关系去掉,统一在工程的 Pom文件进行 jar 包的依赖设置,该工程下的所有模块都能使用该 jar包了。

    五、Maven 仓库

    什么是 Maven仓库

    用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging;

    仓库的分类

    六、远程仓库配置介绍

    中央仓库/远程仓库

    从 Maven安装没了下的 conf 中拷贝setting.xml文件放入~/.m2/repository目录下,在 mirrors标签下增加配置,可以配置多个,如下:

    <!-- 配置远程镜像,即依赖包下载地址 --> 
    <mirrors>
            <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
            
            <mirror>
                <id>central</id>
                <name>Maven Repository Switchboard</name>
                <url>http://repo1.maven.org/maven2/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
            
            <!-- 中央仓库在中国的镜像 -->
            <mirror>
                <id>maven.net.cn</id>
                <name>oneof the central mirrors in china</name>
                <url>http://maven.net.cn/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    </mirrors>

    本地私服

    认证信息

    <!--配置私服仓库认证信息-->
    <servers>
        <server>
                <id>proj-releases</id>
                <username>deployment</username>
                <password>deployment</password>
            </server>
                
            <server>
                <id>proj-snapshot</id>
                <username>deployment</username>
                <password>deployment</password>
            </server>
    </servers>

    配置私服地址

    <profiles>
        <profile>
              <id>nexus</id>
              <!-- 配置使用公司私服进行jar包下载 -->
              <repositories>
                  <repository>
                      <id>nexus-pub</id>
                      <name>Nexus-Pub</name>
                      <url>http://192.168.0.1:8080/nexus/content/groups/public/</url>
                      <releases><enabled>true</enabled></releases>
                      <snapshots>
                          <enabled>true</enabled>
                      </snapshots>
                  </repository>
              </repositories>
              <!-- 配置使用公司私服进行maven插件下载 -->
              <pluginRepositories>
                  <pluginRepository>
                      <id>nexus</id>
                      <name>Nexus</name>
                      <url>http://192.168.0.1:8080/nexus/content/groups/public/</url>
                      <releases><enabled>true</enabled></releases>
                      <snapshots><enabled>true</enabled></snapshots>
                  </pluginRepository>
              </pluginRepositories>
        </profile>
    </profiles>

    我们还能配置将包构建至私服

    <distributionManagement>
            <repository>
                <id>releases</id>
                <name>public</name>
                <url>http://192.168.0.1:8080/nexus/content/repositories/releases</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshots</name>
                <url>http://192.168.0.1:8080/nexus/content/repositories/snapshots</url>
            </snapshotRepository>
    </distributionManagement>

      distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)构件的仓库,后者表示快照版本(开发测试版本)的仓库。这两个元素都需要配置id、name和url,id为远程仓库的唯一标识,name是为了方便人阅读,关键的url表示该仓库的地址。
    往远程仓库部署构件的时候,往往需要认证,配置认证的方式同上。

      配置正确后,运行命令mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,如果项目当前的版本是快照版本,则部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。

  • 相关阅读:
    测试面试题集-Python列表去重
    Python列表去重
    测试面试题集-Python花式打印九九乘法口诀表
    Linux之系统操作命令
    Selenium自动化测试-JavaScript定位
    HDU-3530Subsequence (单调队列)
    HihoCoder
    CodeForces
    HDU-1024Max Sum Plus Plus(最大m段子序列和-DP)
    LightOJ
  • 原文地址:https://www.cnblogs.com/L-Test/p/11784097.html
Copyright © 2011-2022 走看看