Maven

本文详细介绍了Maven,一个Java项目管理和依赖管理工具,包括项目构建过程、传统与Maven的依赖管理对比、Maven的优点、安装配置、以及Maven的工作原理和常用命令。
摘要由CSDN通过智能技术生成

简介

Maven是Apache下的一个纯Java开发的开源项目,它包含了项目对象模型(POM - Project Object Model)依赖管理系统(Dependency Management System)、和用来运行定义在生命周期阶段中插件(Plugin)目标的逻辑。可以通过一小段描述信息来管理项目的构建、报告、文档的软件项目管理工具

常见的项目管理工具还有:Ant、Gradle等。

项目构建

项目构建是一个项目从创建到编码、测试、运行、打包、部署的全过程。

传统项目构建

  1. 创建项目。
  2. 在项目中编写源码增加配置以及第三方Jar文件等。
  3. 对源码进行编译。
  4. 测试(Junit)。
  5. 打包(war文件)部署至应用服务器(Tomcat)运行。

Maven项目构建

Maven将项目构建的过程进行标准化,每一个阶段使用一个或多个命令组合完成。

 

依赖(Jar包)管理

一个项目中需要用使用第三方Jar文件(例如SSM框架需要的Jar文件)才可运行,这些第三方Jar文件就是这个项目的依赖Jar文件。

传统项目的依赖管理

传统项目中的依赖管理完全靠人工进行,将Jar文件手动添加到项目中(WEB-INF/lib)。这样会导致没有对Jar文件的统一管理所产生的版本冲突Jar文件不好下载过多的Jar文件导致项目臃肿

Maven项目依赖管理

Maven项目管理所依赖的Jar文件不需要手动向项目内导入Jar文件,只需要在pom.xml(Maven项目的配置文件)中加入Jar文件的坐标,Maven会自动的从Maven仓库中下载Jar文件并且控制Jar文件之间的依赖

Maven优点

  1. Maven对项目的构建进行标准化、使用其相关命令即可完成构建过程。
  2. 通过在pom中定义坐标从而解决项目中的依赖管理
  3. 跨平台(Windows、Linux、Mac OS)
  4. 提高开发效率,降低项目的维护成本,且大型项目都采用Maven来构建项目。

下载/安装/配置/集成

官网地址:Maven – Welcome to Apache Maven

版本:Maven3.3以后需要使用jdk7+,目前最新版本为3.6.X,学习使用3.5.0(3.4被官方跳过了)。

Windows安装(重点)

  1. 新增环境变量MAVEN_HOME=maven解压目录(bin目录的上层)。
  2. 在环境变量PATH增加%MAVEN_HOME%/bin。                                                                           
  3. 在CMD中输入mvn -v 输出以下信息表示安装成功。

Maven配置(Setting.xml)

Maven的配置信息主要依靠于Setting.xml,在Setting.xml中主要配置,Maven本地仓库的位置,以及镜像地址和Maven项目使用的JDK版本等信息。Setting文件一般存在于两个地方:安装目录下的conf内和${user.home}/.m2/内。前者是Maven的全局配置针对整个操作系统使用者生效、后者是用户个性配置。

本地仓库配置(53行):

镜像地址(主要是用来远程下载Jar包用的172行):

<mirror>  

     <id>alimaven</id>  

     <name>aliyun maven</name>  

     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>;  

     <mirrorOf>central</mirrorOf>          

   </mirror>

Maven项目JDK版本指定(297行):

<profile>

   <id>jdk-1.8</id>

   <activation>

   <activeByDefault>true</activeByDefault>

   <jdk>1.8</jdk>

   </activation>

   <properties>

   <maven.compiler.source>1.8</maven.compiler.source>

   <maven.compiler.target>1.8</maven.compiler.target>

   <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>

   </properties>

   </profile>

在</settings>标签上配置以下信息激活JDK版本指定(323行)

<activeProfiles>

   <activeProfile>jdk-1.8</activeProfile>

  </activeProfiles>

Maven仓库(Repository)

Maven仓库是简单来说就是存放Jar文件和插件的仓库,按照所属位置的不同可以分为本地仓库、私服、远程仓库、中央仓库

本地仓库(Local)

用来存储从其它仓库中下载的插件Jar文件,项目中使用到的插件或Jar文件优先从本地仓库中获得

远程仓库(Remote)

如果项目中所需的第三方依赖本地仓库没有,Maven会去远程仓库中寻找下载到本地仓库。远程仓库可以是互联网或局域网。(只要不是本地仓库,都可以看成是远程仓库)

私服(Private)

私服就是公司自己搭建的远程仓库服务器即是公司内部的maven远程仓库。里面不光有第三方的插件和Jar文件,还包括了公司内部的Jar文件或插件

中央仓库(Center)

Maven官方维护的一个远程仓库,里面有非常全的依赖,它包含了世界上绝大部分的开源项目的组件,但是特别慢,所以咱们之前配置了阿里云的Maven镜像仓库来代替中央仓库,这个镜像其实就是阿里云把私服公开了。

Maven依赖流程图

 

当项目中需要依赖时,Maven首先会从本地仓库中获取。当本地仓库中没有时,Maven会根据配置去远程仓库(可以是私服)中获取。当远程仓库中也没有时会到Maven的中央仓库中获取。

本地仓库-->远程仓库/私服-->远程仓库/中央仓库

POM.XML

POM(Project Object Model)作为Maven的项目对象模型主要包含了三个部分:基本信息、依赖管理、构建

基本信息

POM的基本信息用来描述整个项目模块的内容。主要有以下几个部分组成:

标签

描述

<modelVersion>

Maven模块版本,目前一般取值为4.0

<groupId>

组织ID一般使用包名

<artifactId>

项目名或模块名

<version>

项目或模块的版本号:一般使用SNAPSHOT(快照版/开发版)、RELEASE(发布版/正式版)也可自定义。

<packaging>

打包类型,常见值为:jar、war、pom

Maven通过groupId+artifactId+version来确定project的位置。简单来说Maven是通过POM中的基本信息来定位project的位置

依赖管理(dependencies)

向Maven项目中添加项目依赖(Jar)需要在POM.xml中配置依赖坐标。Maven的POM与POM之间存在三种关系、依赖、继承、聚合

依赖(dependencie)

当前Maven项目(A)需要依赖另一个Maven项目(B)那么我们就可以说A依赖于B(我们之前配置的Jar文件的坐标(依赖)信息实际上就是一个Maven项目)。

POM的依赖主要靠以下标签进行依赖的定位:

<dependencies>

<dependencie>

<groupId>依赖项的groupId</groupId>

<artifactId>依赖项的artifactId</artifactId>

<version>依赖项的版本</version>

<scope>依赖项的作用域</scope>

<exclusions>排除依赖冲突时使用</exclusions>

</dependencie>

</dependencies>

<dependencies>标签是Maven POM中的依赖管理标签

<dependency>标签内配置每个依赖的坐标

查看依赖网址:Maven Repository: Search/Browse/Explore

坐标

Maven定位依赖都是根据坐标在仓库中确定一个唯一的文件

坐标三要素
  1. groupId:组织ID。
  2. artifactId:项目名。
  3. version:版本号。
定位规则(了解)

LocalPath(本地仓库位置)/groupId/artifactId/version/artifactId- version.packaging

scope作用域(重点)
compile编译(默认值/缺省值)

编译时生效,伴随Maven的整个生命周期。

provided期望

类似compile,期望JDK、使用者或容器会提供相关依赖(当我们项目需要编译或开发时需要使用该依赖、但是在部署运行时其它容器会提供相关依赖时我们进行provided配置,否则会出现依赖冲突)。例如:Servlet.jar应用服务器会提供相关依赖。

 

runtime运行

只在运行时生效。

 

 

test测试

只在测试时生效,不会随项目发布

 

system系统本地

当maven的Repository内不存在时使用。某些项目并未使用Maven,但我们需要使用时会导致我们无法从Repository中获取对应依赖的坐标信息,我们可以把对应jar存放到WEB-INF/lib中进行引用。可以使用私服解决

继承

Maven多模块开发时parent内的依赖,对应的子模块也会拥有。

聚合

Maven多模块开发时在父模块中聚合个个子模块。

属性(Properties)

属性表述类似EL表达式,使用<properties>标签来定义属性的引用。

构建(build)

当项目进行到构建阶段时,我们需要在POM中的<build>内进行项目在构建时的一些设置。

插件(Plugin)

<plugins>

<plugin></plugin>

</plugins>

 

资源(resources)

通过<resources>指定在构建时需要的资源文件。

 

resources:一个resource元素的列表,每一个都描述与项目关联的文件是什么和在哪里;

targetPath:指定build后的resource存放的文件夹。该路径默认是basedir。通常被打包在JAR中的resources的目标路径为META-INF;

filtering:true/false,表示为这个resource,filter是否激活。

directory:定义resource所在的文件夹,默认为${basedir}/src/main/resources;

includes:指定作为resource的文件的匹配模式,用*作为通配符;

excludes:指定哪些文件被忽略,如果一个文件同时符合includes和excludes,则excludes生效;

testResources:定义和resource类似,但只在test时使用,默认的test

resource文件夹路径是${basedir}/src/test/resources,test resource不被部署。

Maven使用

运行Maven命令(重点)

查看Maven版本:mvn -v / mvn -version

创建项目:mvn archetype:generate

编译:mvn compile

清除:mvn clean

打包:mvn package

安装:mvn install

发布:mvn deploy

运行:mvn tomcat:run、mvn tomcat7:run、mvn jetty:run(根据POM中配置的不同插件选择)

(注意:在Eclipse中使用去掉mvn

在进行 compile、package、install、deploy或运行命令时一般和clean组合使用并且可以加入参数:

跳过测试 -Dmaven.test.skip=true

强制更新快照 -U

compile、package、install、deploy区别(重点)

  1. compile只会编译类文件,不会打包。
  2. package只会将包生成到target内。
  3. install会将target内的包安装到本地仓库。
  4. deploy会将target内的包安装到本地仓库并且上传到私服(POM文件需要配置)。

其它命令参考资料:Maven常用命令: - 艺意 - 博客园

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值