首页 > 其他分享 >maven基础

maven基础

时间:2023-03-11 17:34:26浏览次数:65  
标签:依赖 仓库 基础 maven 测试 test 资源

maven基础

maven简介

  • maven是什么

    maven的本质是一个项目管理工具,将项目开发和管理过程抽象为一个对象模型(POM)

    POM(Project Object Model):项目对象模型

  • maven的作用

    • 项目构建:提供标准的、跨平台的自动化项目构建方式
    • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
    • 同一开发结构:提供标准的、统一的项目结构

下载与安装

  • 下载地址

    官网:http://maven.apache.org/

    下载地址:http://maven.apache.org/download.cgi

  • 安装

    maven属于绿色版软件,解压即安装

  • 配置环境变量

    • 依赖java,需要配置JAVA_HOME

    • 设置maven自身运行环境,需要配置M2_HOME

      新加一个环境变量 “M2_HOME”,值为maven的解压路径

      在path里新加一个值,如下图

      在命令行输入mvn -v 检验是否配置成功

maven基础概念

  • 仓库

    • 仓库:用于存储资源,包含各种jar包
    • 仓库的分类:
      • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
      • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
        • 中央仓库:maven团队维护,存储所有资源的仓库
        • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
    • 私服的作用:
      • 保存具有版权的资源,包含购买或自主研发的jar
        • 中央仓库中的jar都是开源的,不能存储具有版权的资源
        • 一定范围内共享资源,仅对内部开放,不对外共享
  • 坐标

    • 什么是坐标

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

        https://repo1.maven.org/maven2/

      • maven坐标主要组成

        • groupId:定义当前maven项目隶属组织名称(通常是域名反写,例如:org.myatis)
        • artifactId:定义当前maven项目名称(通常是模块名称,例如:CRM,SMS)
        • version:定义当前版本号
        • packaging:定义改项目的打包方式
      • maven坐标的作用

        • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
  • 本地仓库配置

    • conf --> settings.xml

      仓库位置自己定

  • 镜像仓库

    • conf --> settings.xml

      <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>*</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
      

第一个maven项目(手工制作)

  • maven工程目录结构

  • 构建命令

    • maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
      • mvn compile 编译
      • mvn clean 清理
      • mvn test 测试
      • mvn package 打包
      • mvn install 安装到本地仓库

第一个maven项目(idea生成)

  1. 创建一个空项目

  1. 自定义编译(其他命令创建方式一样)

  2. 快捷编译(其他命令操作方式一样)

运行web项目添加插件

<!--构建-->
<build>
    <!--设置插件-->
	<plugins>
        <!--具体的插件配置-->
    	<plugin>
            <dependency>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
            </dependency>
        </plugin>
    </plugins>
</build>

依赖管理

  • 依赖配置

    • 依赖指当前项目运行所需要的jar,一个项目可以设置过个依赖

    • 格式:

      <!--设置当前项目所依赖的所有jar-->
      <dependencies>
          <!--设置具体的依赖-->
          <dependency>
              <!--依赖所属群组id-->
              <groupId>junit</groupId>
              <!--依赖所属项目id-->
              <artifactId>junit</artifactId>
              <!--依赖版本号-->
              <version>4.11</version>
          </dependency>
      </dependencies>
      
  • 依赖传递

    • 依赖具有传递性
      • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
      • 简介依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
    • 依赖传递冲突问题
      • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
      • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置靠后的
      • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
  • 可选依赖

    • 可选依赖指对外隐藏当前所依赖的资源——不透明

      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <optional>true</optional>
      </dependency>
      
  • 排除依赖

    • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <exclusions>
          	<exclusion>
              	<groupId>要排除的群组id</groupId>
                  <artifactId>要排除的项目id</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      
  • 依赖范围

    • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

    • 作用范围

      • 主程序范围有效(main文件夹范围内)
      • 测试程序范围有效(test文件夹范围内)
      • 是否参与打包(package指令范围内)

    • 依赖范围的传递性

      • 带有依赖范围的资源在进行传递时,作用范围讲受到影响

生命周期与件

  • 构建生命周期

    • maven构建生命周期描述的是一次构建过程经历经历了多少个事件

    • maven对项目构建的生命周期划分为3套

      • clean:清理工作
        • pre-clean:执行一些需要clean之前完成的工作
        • clean:移除所有上一次构建生成的文件
        • post-clean:执行一些需要在clean之后立刻完成的工作
      • default:核心工作,例如编译,测试,打包,部署等
        • validate (校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
        • initialize (初始化):初始化构建状态,比如设置属性值。
        • generate-sources (生成源代码):生成包含在编译阶段中的任何源代码。
        • process-sources (处理源代码):处理源代码,比如说,过滤任意值。
        • generate-resources (生成资源文件):生成将会包含在项目包中的资源文件。
        • process-resources (处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备
        • compile (编译):编译项目的源代码。
        • process-classes (处理类文件):处理编译生成的文件,比如说对Java lass文件做字节码改善优化。
        • generate-test-sources (生成测试源代码):生成包含在编译阶段中的任何测试源代码。
        • process-test-sources (处理测试源代码):处理测试源代码,比如说,过滤任意值。
        • generate-test-resources (生成测试资源文件):为测试创建资源文件。
        • process-test-resources (处理测试资源文件):复制和处理测试资源到目标目录。
        • test- compile (编泽测试源码):编译测试源代码到测试目标目录.
        • process-test-lasses (处理测试类文件):处理测试源码编译生成的文件。
        • test (测试):使用合适的单元测试框架运行测试(uint是其中之一-).
        • prepare-package (准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
        • package(打包):将编译后的代码打包成可分发格式的文件,比如JAR. WAR或者EAR文件。
        • pre- integration-test (集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
        • integration-test (集成测试):处理和部署项目到可以运行集成测试环境中。
        • post-integration-test (集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
        • verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
        • install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
        • deploy (部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。
      • site:产生报告,发布站点等
        • pre-site:执行一些需要在生成站点文档之前完成的工作
        • site:生成项目的站点文档
        • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
        • site-deploy:将生成的站点文档部署到特定的服务器上
  • 插件

    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
    • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能
    <!--构建-->
    <build>
        <!--设置插件-->
    	<plugins>
            <!--具体的插件配置-->
        	<plugin>
                <dependency>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <executions>
                    	<execution>
                        	<goals>
                            	<goal>jar</goal>
                            </goals>
                            <phase>generate-test-resources</phase>
                        </execution>
                    </executions>
                </dependency>
            </plugin>
        </plugins>
    </build>
    

标签:依赖,仓库,基础,maven,测试,test,资源
From: https://www.cnblogs.com/lw-java/p/17206422.html

相关文章

  • Nginx基础 - 07代理缓存
     缓存是用来减少后端压力,将压力尽可能的往前推, 提高网站的并发延时。一、缓存常见类型服务端缓存:redis/memcached代理缓存,获取服务端内容进行缓存:Nginx_proxy  ......
  • 01-面试必会-JAVA基础篇
    1.Final有什么用?被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,......
  • Java并发基础知识
    进程与线程进程,程序的一次执行过程,系统运行程序的基本单位。启动main函数,即启动JVM的一个进程,mian函数为其主线程。同类多个线程共享进程的堆和方法区资源,切换工作负担......
  • 第 1 章 C++编程基础 Basic C++ programming
    1.1如何撰写C++程序_HowtoWriteaC++Program练习1.4,在终端上让用户输入fastname和lastname并打印出来练习1.4#include<iostream>#include<vector>#include......
  • Java基础之并发——CAS操作
    CAS操作的内存地址V,旧的预期值A,即将要更新的目标值B的获取顺序是:首先,读取内存地址V的值;然后,读取旧的预期值A的值;最后,读取即将要更新的目标值B的值。CAS操作是原子性的,因......
  • maven pom relativePath属性的作用
    搭建maven项目,子模块指定父模块试,经常会在parent下面出现relativePath类似下面:<parent><groupId>net.itxw</groupId><artifactId>test</artifactId><vers......
  • 量化系统 GUI 库 PyQt5 基础以及使用技巧(上)
    量化系统GUI库PyQt5基础以及使用技巧(上)python流行的图形界面库PyQt:一个基于C++库Qt的Python库,提供了丰富的GUI工具和高度可定制的UI设计,也是很多商业应用程序的......
  • Nginx基础 - 04静态资源
      一、静态资源类型Nginx作为静态资源Web服务器部署配置,传输非常的高效,常常用于静态资源处理、请求、动静分离。非服务器动态运行生成的文件属于静态资源。类型......
  • Java基础 - 基本数据类型,基本数据类型之间的运算规则,引用数据类型
    基本数据类型:1.整数类型 类型:byte,short,int,long字节:byte1字节,short2字节,int4字节,long8字节容量:byte-128~127,short-3万~3万左右,-20亿~20亿左右,long特别大默认字......
  • 《SQL与数据库基础》19. 日志
    目录日志错误日志二进制日志日志格式日志查看日志删除查询日志慢查询日志本文以MySQL为例日志错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysql启......