Maven使用指南(一)基础概念

目录

一、Maven简介

二、POM元素介绍

三、Maven仓库配置


一、Maven简介

  1) 跨平台的项目管理工具

       Maven是一个项目构建工具、依赖管理工具、项目信息管理工具

  • 项目构建:自动化构建过程,完成从清理、编译、测试到生成报告,再到打包和部署所有阶段
  • 依赖管理:根据groupId、artifactId、version元素自动下载依赖的类库
  • 项目信息管理:集中管理分散在项目各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址等等

  2) 核心概念

       Maven包括以下核心概念:

  • 坐标:    唯一定位一个类库
  • 依赖:    说明项目所需要的类库列表
  • 仓库:    存储类库的地点
  • 生命周期:    所有构建过程的抽象和统一,不做任何实际的工作
  • 插件:    每个生命周期的阶段绑定一个或多个插件,完成实际的构建工作

二、POM元素介绍

1) POM元素

元素名称说明默认值
modelVersionPOM模型的版本4.0.0
groupId定义项目所属组 
artifactId定义项目在组中的唯一ID 
version项目版本,分为发布版本和快照版本。以SNAPSHOT结尾的是快照版本 
packaging打包方式,可选值为jar、war、pom、maven-plugin、ejb、ear、rarjar
classifier定义主构件的附属构件,不能直接定义 
name对于用户更为友好的名称,无其它意义 
dependencies依赖列表 
dependency定义一个依赖 
scope

控制依赖与3中classpath(编译、测试、运行)的关系

compile对3中classpath均生效
test仅对测试生效
provided运行已提供依赖,仅对编译和测试生效
rumtime测试和运行有效,对编译无效
system依赖范围与provided完全一致,但需要通过<systemPath>${filepath}</systemPath>显示执行依赖文件的路径
import导入依赖范围,对3中classpath均无效
compile
type依赖的类型,对应依赖类库的packaging的值jar
optional标记依赖是否为可选依赖,可选依赖不会被传递,需要在子POM中重新指定false
exclusion排除依赖jar包中的部分类库 

2) 生成项目骨架命令

    使用mvn archetype:generate,并跟随提示输入groupId和artifactId(其余可以使用默认值,直接回车),可以生成完整的maven项目骨架。

3) 依赖分析命令

  1. mvn dependency:list  : 以列表的形式展示所有的依赖(包括传递依赖)以及依赖范围
  2. mvn dependency:tree :以层级结构展示依赖树
  3. mvn dependency:analyze :分析项目的依赖,包括已使用但未显式声明依赖,已显式声明但未使用的依赖(显式声明:直接在POM文件中指定,而非通过其它依赖传递进来的
    1. Used undeclared dependencies:已使用但未显式声明依赖,通过直接依赖传递进来的。可能由于直接依赖升级,相关传递性依赖的版本同步变更,导致与当前项目不兼容
    2. Unused declared dependencies:已显式声明但未使用依赖,但只会分析编译主代码和测试代码阶段用到的依赖,仅执行阶段使用到的依赖会被作为未使用依赖,因此不能简单地直接删除声明

三、Maven仓库配置

1) 仓库类型

  1. 本地仓库:本地存储依赖文件的目录
  2. 远程仓库:分为3类
    1. 中央仓库:超级POM中默认配置的远程仓库(地址:http://repo.maven.apache.org/maven2/
    2. 私服:局域网内的远程仓库,减少从中央仓库或其它公共库下载的耗时
    3. 其它公共库

2) settings.xml文件配置

  1. 设置本地仓库
    <localRepository>${localpath}</localRepository>
  2. 设置远程仓库:远程仓库包括依赖仓库以及插件仓库,需要分开配置
    <!-- 由于settings.xml文件中无法直接设置repositories、pluginRepositories元素,因此需要嵌套在profiles中 -->
    <profiles>
        </profiles>
            <id>remote-repository</id>
            <!-- 默认激活当前profile。支持多个profile,仅激活其中一部分(不激活则无效) -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <!-- 下载依赖的远程仓库 -->
            <repositories>
                <!-- 发布版本的仓库设置 -->
                <repository>
                    <id>releases</id>
                    <name>依赖发布版本的仓库</name>
                    <url>${release_url}</url>
                    <!-- 快照版本配置 -->
                    <snapshots>
                        <enabled>false</enabled> <!-- 不支持快照版本下载 -->
                    </snapshots>
                    <!-- 发布版本配置 -->
                    <releases>
                        <enabled>true</enabled> <!-- 支持发布版本下载 -->
                        <updatePolicy>daily</updatePolicy> <!-- 检查更新的频率,默认为daily。可选值有daily-每天检查一次,never-从不检查,always-每次构建都检查,interval:X-每隔X分钟检查一次 -->
                        <checksumPolicy>warn</checksumPolicy> <!-- 配置校验和失败的策略,默认为warn。可选之有warn-执行构建时输出警告信息,fail-直接让构建失败,ignore-完全忽略 -->
                    </releases>
                </repository>
                <!-- 快照版本的仓库设置 -->
                <repository>
                    <id>snapshots</id>
                    <name>依赖快照版本的仓库</name>
                    <url>${snapshot-url}</url>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </snapshots>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                </repository>
            </repositories>
            <!-- 下载插件的远程仓库 -->
            <pluginRepositories>
                <pluginRepository>
                    <id>releases</id>
                    <name>插件发布版本的仓库</name>
                    <url>${plugin_release_url}</url>
                    <snapshots>
                        <enabled>false</enabled> 
                    </snapshots>
                    <releases>
                        <enabled>true</enabled> 
                    </releases>
                </pluginRepository>
                <pluginRepository>
                    <id>snapshots</id>
                    <name>插件快照版本的仓库</name>
                    <url>${plugin_snapshot-url}</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

     

  3. 远程仓库的访问认证:部分远程仓库需要用户名和密码进行认证
    <servers>
        <server>
            <id>release</id> <!-- id必须与需要认证的远程仓库ID一致 -->
            <username>admin</username>
            <password>123</password>
        </server>
    </servers>

     

  4. 设置镜像:将对指定远程仓库的访问转发到镜像上,一般用于提高下载速度(这里的镜像可以覆盖前面的远程仓库设置
    <mirrors>
        <mirror>
            <id>mirror-central</id> <!-- 当前镜像的唯一ID -->
            <name>中央仓库在中国的镜像</name>
            <url>http://maven.net.cn/content/groups/public/</url> <!-- 镜像地址 -->
            <mirrorOf>central<mirrorOf> <!-- 镜像代理的仓库ID,可以用“,”分隔多个仓库ID,*-所有maven仓库 -->
        </mirror>
    </mirrors>
  5. 部署至远程仓库的配置:经过以上配置,可以从仓库下载依赖,但无法部署依赖,因此需要单独设置部署构件的仓库。使用mvn deploy命令部署至远程仓库

    <distributionManager>
        <!-- 部署发布版本构件的配置 -->
        <repository>
            <id>deploy-release</id>
            <name>部署发布版本构件的仓库</name>
            <url>${deploy_release_url}</url>
        </repository>
        <!-- 部署快照版本构件的配置 -->
        <snapshotRepository>
            <id>deploy-snapshot</id>
            <name>部署快照版本构件的仓库</name>
            <url>${deploy_snapshot_url}</url>
        </snapshotRepository>
    </distributionManager>

     

3) 从仓库下载依赖的机制

  1. 当scope为system时,根据路径从本地文件系统解析
  2. 其它scope根据依赖坐标计算仓库路径后,首先从本地仓库查找
  3. 本地仓库不存在则从远程仓库查找(每次构建时,SNAPSHOT版本都需要从远程仓库重新下载)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值