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>

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

原文地址:https://www.cnblogs.com/fqh2020/p/14750192.html