• Maven工具基本使用


    1 maven的简介

    1.1什么是maven

    maven是Apache下的开源项目,项目管理工具,管理Java项目,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

    1.2 maven仓库

    • 中央仓库:就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2/
    • 本地仓库:相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(也就是在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
    • 私服:在公司内部架设一台私服,其它公司架设一台仓库,对外公开。  

    2.maven环境搭建

    2.1 maven下载

    可以到maven的官网下载  http://maven.apache.org/download.cgi

    将下载好的压缩包进行解压就行了

    2.2 环境变量配置

    新建系统变量   MAVEN_HOME  变量值:E:Mavenapache-maven-3.3.9  (注意:这里的路径是maven安装包的路径)

    编辑系统变量  Path         添加变量值: ;%MAVEN_HOME%in

    2.3 仓库配置

    在电脑任意盘符新建一个文件夹,用作本地仓库,例如我这里在桌面新建一个文件夹repository

    其路径为:C:Userseric.fangDesktop epository

    本地仓库配置:打开maven的安装目录中conf/ settings.xml文件,在这里配置本地仓库:

    <localRepository>C:Userseric.fangDesktop
    epository</localRepository>

    远程仓库配置:远程仓库也是在maven的安装目录中conf/ settings.xml文件中进行配置,它被配置在mirrors标签中

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

    2.4 eclipse配置maven

    1)配置maven的安装目录

    进入eclipse ,选择菜单windows - Preferences , 在左侧的树状导航中

     点击add按钮,弹出窗口后选择maven的安装目录,然后点击apply

    2)配置User Settings

     选择左侧树形导航的User Settings  ,选择Maven目录下conf下的settingsxml,然后点击Update Settings 、Reindex 和Apply按钮.

    选择菜单 window --> show View,然后选择 Rebuild  Index  重新创建索引

    2.5 idea配置maven

    在settings搜索maven,然后对maven路径进行修改,并且设置仓库

     3.maven入门

    3.1 创建maven项目

    在idea中选择菜单  File ->New->Project

     这里我们不使用模板进行创建,直接点击next

     在这里我们可以指定项目名,和项目的maven坐标

    坐标包括:

    Group Id:项目的名称,项目名称以域名的倒序,比如:com.gh

    Artifact Id:模块名称(子项目名称)

    Version:模块的版本,snapshot(快照版,没有正式发行)、release(正式发行版本)

    输入后,Finish 。完成后如下图

     项目目录结构说明:

    /src/main/java      主体程序 java源文件(不要放配置文件)

    /src/main/resources  主体程序所需要的配置文件(不要放java文件)

    /src/test/java       单元测试程序 java源文件

    pom.xml          Maven进行工作的主要配置文件。

    3.2 添加maven依赖

    在pom的xml文件中加入如下内容

        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.62</version>
            </dependency>
        </dependencies

    当刷新maven工程时,我们就能正常引入依赖了

    3.3 maven生命周期

    Maven有三套相互独立的生命周期,分别是:clean、default、site。clean主要是清理项目、default是Maven最核心的的构建项目、site是生成项目站点。每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像Ant的构建依赖。生命周期本身相互独立,用户可以仅仅调用生命周期的某一个阶段,也就是说用户调用了default周期的任何阶段,并不会触发clean周期以及site周期的任何事情。三大生命周期蕴含着小小的阶段,我们按顺序看一下

    (1)clean周期:

    pre-clean:准备清理

    clean:真正的清理工作

    post-clean:执行清理后的一些后续工作

    (2)default周期:

    validate:验证

    initialize:初始化配置

    generate-sources:生成源代码编译目录

    process-sources:处理项目主资源文件,复制资源文件到outputclasspath

    generate-resources:生成资源目录

    process-resources:处理资源文件

    compile:编译源代码

    process-classes:处理编译后文件

    generate-test-sources:生成测试目录

    process-test-sources:处理项目测试资源文件,复制测试资源文件到outputclasspath

    generate-test-resources:生成测试资源文件

    process-test-resources:处理测试资源文件

    test-compile:编译测试代码

    process-test-classes:处理测试代码

    test:单元测试运行测试代码

    prepare-package:打包前的准备

    package:将编译好的代码打包成为jar或者war或者ear等等

    pre-integration-test:准备整体测试

    integration-test:整体测试

    post-integration-test:为整体测试收尾

    verify:验证

    install:安装到本地Maven库

    deploy:将最终包部署到远程Maven仓库

    (3)site周期:

    pre-site:准备生成站点

    site:生成站点及文档

    post-site:站点收尾

    site-deploy:将生成的站点发布到服务器上

    3.4 maven常用命令

    compile:编译

    clean:清理,将target下的class文件清理

    test: 执行单元测试类,执行src/test/java下的类

    package :将java工程打成jar、war。

    install:安装命令,将将程的jar发布到本地仓库

    发布到仓库,目录按照本工程定义的坐标生成目录

    4.maven多模块项目的概念

    我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,这个时候我们就需要通过maven构建多模块

    4.1 父工程

    创建方式:创建一个maven工程,在pom.xml中指定打包方式为pom

    建立该project的时候,我们要注意以下几点:

    • 1.父工程本身也做为一个Maven项目,它必须有自己的POM
    • 2.它的打包方式必须为: pom
    • 3.引入了新的元素:modules---module
    • 4.版本:父工程的版本和子模块版本一致
    • 5.相对目录:每个module的值都是一个当前POM的相对目录
    • 6.目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的目录</module>相一致。
    • 7.习惯约定:为了方便构建,通常将父工程放在项目目录层的最顶层,其它module作为子目录存在。这样当我们打开项目的时候,第一个看到的就是父工程的POM
    • 8.父工程减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
    • 9.父工程和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么父工程的POM文件也需要做出相应的更改。

    4.2 子模块

    子模块又叫子工程,它的创建是在父工程的基础上,创建子模块是在父工程根目录new一个 module

    建立该module的时候,我们要注意以下几点:

    • 1.新的元素:<parent> , 它是被用在子模块中的
    • 2.<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
    • 3.relativePath的默认值: ../pom.xml
    • 4.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素

    5.依赖管理

    5.1 依赖范围

    通常依赖范围我们是通过scope标签来指定的,如果不设置默认为compile,scope一般有以下四种值

    1)compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。

           strus-core、spring-beans

           打到war包或jar包。

    2)provided 编译、和测试有效,A在编译和测试时需要B。

           比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。

           不会打到war。

    3)runtime:测试、运行有效。

           比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。

           在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!!

           会打到war。

    4)test:只是测试有效,只在单元测试类中用。

           比如:junit

           不会打到war。

    使用案例:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

    5.2 依赖传递

    5.2.1 直接依赖

           A依赖B,B是A的直接依赖。在A的pom.xml中添加B的坐标。

    5.2.2 传递依赖

      A依赖B,B依赖C,C是A的传递依赖。

    5.2.3 依赖范围的依赖传递关系

     传递依赖的范围:

     5.3 版本控制

    在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。

    pom.xml文件中,jar的版本判断的两种途径

    1.如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version。

    2.如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

    5.4 排除依赖

    当我们引入了同一个依赖的两个不同版本时,可能会出现版本冲突问题,所以我们需要排除低版本的jar包,通过exclusions标签来声明

    例如:

         <dependency>
              <groupId>org.apache.struts</groupId>
              <artifactId>struts2-core</artifactId>
              <version>2.3.24</version>
              <exclusions>
                  <exclusion>
                      <groupId>javassist</groupId>
                      <artifactId>javassist</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    LoadRunner脚本转化成Jmeter脚本
    LoadRunner场景运行错误解决方法
    IntelliJ IDEA lombok插件的安装和使用
    js瀑布流加载数据
    js获取浏览器高度和宽度值(多浏览器 图解经典) 转载
    MPMoviePlayerViewController和MPMoviePlayerController
    NSString的内存管理问题
    cocos2D icon
    Singleton 单例模式
    Cocos2d中各种坐标位置关系
  • 原文地址:https://www.cnblogs.com/fqh2020/p/14750192.html
Copyright © 2020-2023  润新知