Maven笔记速通

在学校学习的时候,你是否会觉得配置环境很繁琐,不知道去哪里下载,又或者下载各种版本的依赖很麻烦。Maven就解决了这个问题。

无论是小型的开源类库项目,还是大型的企业级应用; 无论是传统的瀑布式开发,还是流行的敏捷开 发, Maven 都能大显身手。

Maven的安装配置

首先得检查JDK的版本

JDK 版本 11 及以上版本

下载Maven

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

配置Maven环境变量

解压后把 Maven 的根目录配置到系统环境变量中 MAVEN_HOME ,将 bin 目录配置到 path 变量中。
注: maven 解压后存放的目录不要包含中文和空格

检查Maven是否安装成功

打开 dos 窗口,执行 mvn -v

 


Maven的特性

一、依赖管理系统

Maven Java 世界引入了一个新的依赖管理系统 jar 包管理 jar 升级时修改配置文件即可。在 Java 世界
中,可以用 groupId artifactId version 组成的 Coordination (坐标)唯一标识一个依赖。
任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 Jar 包,也可以是 war 包或者
jar 包。一个典型的依赖引用如下所示:

<dependencies>
<!--    mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
        <!-- log4j日志-->
        <dependency>
            <groupId>#</groupId>
            <artifactId>log4</artifactId>
            <version>log4j-2.17.0</version>
            <type>pom</type>
        </dependency>
</dependencies>

坐标属性的理解
Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。
groupId
定义当前 Maven 项目隶属的实际项目 - 公司名称。( jar 包所在仓库路径) 由于 Maven 中模块的概念,
因此一个实际项目往往会被划分为很多模块。 比如 spring 是一个实际项目,其对应的 Maven 模块会有很
多,如 spring-core,spring-webmvc 等。
artifactId
该元素定义实际项目中的一个 Maven 模块 - 项目名, 推荐的做法是使用实际项目名称作为 artifactId
前缀。 比如: spring-bean spring-webmvc 等。
version
该元素定义 Maven 项目当前所处的版本。写好后点击右下角的 Import Changes就可以自动导入依赖了
二、  多模块构建
项目复查时 dao service controller 层分离将一个项目分解为多个模块已经是很通用的一种方式。
Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM 。在该 POM 中可以使用 标签来定
义一组子模块。 parent POM 不会有什么实际构建产出。而 parent POM 中的 build 配置以及依赖配置都
会自动继承给子 module。写在 <dependencies>标签前面
<!--父工程-->
    <groupId>org.example</groupId>
    <artifactId>Hziee</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mybatis_01</module>
    </modules>

三、 一致的项目结构

Ant 时代大家创建 Java 项目目录时比较随意,然后通过 Ant 配置指定哪些属于 source ,那些属于
testSource 等。而 Maven 在设计之初的理念就是 Conversion over configuration (约定大于配置)。其
制定了一套项目目录结构作为标准的 Java 项目结构 , 解决不同 ide 带来的文件目录不一致问题。

四、一致的构建模型和插件机制

<plugin>
     <groupId>org.mortbay.jetty</groupId>
     <artifactId>maven-jetty-plugin</artifactId>
     <version>6.1.25</version>
     <configuration>
         <scanIntervalSeconds>10</scanIntervalSeconds>
         <contextPath>/test</contextPath> 
    </configuration>
 </plugin>

修改Maven默认下载地址

因为默认是从国外网站下载,所以下载速度很慢,修改成国内阿里云镜像就可以快很多。

1.1. 修改默认仓库位置
打开 maven 目录 -> conf -> settings.xml
添加仓库位置配置
<localRepository> F:/m2/repository </localRepository>
注:仓库位置改为自己本机的指定目录, "/" 不要写反
1.2. 更换阿里镜像 , 加快依赖下载
<mirror>
<id> nexus-aliyun </id>
<mirrorOf> central </mirrorOf>
<name> Nexus aliyun </name>
<url> http://maven.aliyun.com/nexus/content/groups/public </url>
</mirror>

Maven项目的创建

新建项目
2. 选择 "File" —> "New" —> "Project" ,选择 "Maven" ,设置 JDK 版本,选择 maven 项目的模板

 

 

3. 设置项目的 GroupId ArtifactId  Name和Location也是自己写的

 

4. 检查 Maven 环境,选择 "Next"
5. 等待项目创建,下载资源,创建完成 注:右下角弹出的提示框,选择 "Enable Auto-Import" Maven 启动自动导入)
编译项目
1. 点击右上角的 "Add Configurations " ,打开 "Run/Debug Configurations" 窗口
2. 点击左上角的 "+" 号,选择 "Maven" 3. 设置编译项目的命令
4. 执行编译命令,两个图标分别代表 " 普通模式"(三角形 )和 " 调试模式 "(虫子)
5. 编译成功 6.2. 创建 Web 项目

Maven仓库的基本概念

当第一次运行 Maven 命令的时候, 你需要 Internet 链接, 因为它需要从网上下载一些文件。 那么它
从哪里下载呢? 它是从 Maven 默认的远程库下载的。 这个远程仓库有 Maven 的核心插件和可供下载的
jar 文件。
对于 Maven 来说, 仓库只分为两类: 本地仓库和远程仓库
Maven 根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在,则直接使用; 如果
本地没有, Maven 就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。 如果本地仓库
和远程仓库都没有, Maven 就会报错。
远程仓库分为三种: 中央仓库,私服, 其他公共库。
中央仓库是默认配置下, Maven 下载 jar 包的地方。
私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,
用其代理所有外部的远程仓库。 内部的项目还能部署到私服上供其他项目使用。
一般来说,在 Maven 项目目录下,没有诸如 lib/ 这样用来存放依赖文件的目录。 当 Maven 在执行编译
或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
默认情况下, 每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。 有时
候,因为某些原因(比如 c 盘空间不足) , 需要修改本地仓库目录地址。
对于仓库路径的修改,可以通过 maven 配置文件 conf 目录下 settings.xml 来指定仓库路径
<!-- 设置到指定目录中,路径的斜杆不要写反 -->
 <settings> 
    <localRepository>D:/m2/repository</localRepository>
 </settings>
中央仓库
由于原始的本地仓库是空的, maven 必须知道至少一个可用的远程仓库,才能执行 maven 命令的时候
下载到需要的构件。中央仓库就是这样一个默认的远程仓库。
maven-model-builder-3.3.9.jar maven 自动的 jar 中包含了一个 超级 POM 。定义了默认中央仓库的
位置。
中央仓库包含了 2000 多个开源项目,接收每天 1 亿次以上的访问。
私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务, 私服代理广域网上的远程仓库,供局
域网内的 maven 用户使用。 当 maven 需要下载构件时, 它去私服当中找,如果私服没有, 则从外部远
程仓库下载,并缓存在私服上, 再为 maven 提供。
此外,一些无法从外部仓库下载的构件也能从本地上传到私服提供局域网中其他人使用
其他公共库
常用的阿里云仓库配置
<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>central</mirrorOf> 
    <name>Nexus aliyun</name>             
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 </mirror>

依赖的基本配置

根元素project下的dependencies可以包含多个 dependency元素,以声明多个依赖。每个依赖都应

该包含以下元素:

1. groupId, artifactId, version : 依赖的基本坐标, 对于任何一个依赖来说,基本坐标是最重要的,

Maven根据坐标才能找到需要的依赖。

2. Type: 依赖的类型,大部分情况下不需要声明。 默认值为jar

3. Scope: 依赖范围(compile,test,provided,runtime,system)

compile: 编译依赖范围。

如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测

试、运行三种classpath都有效。

test: 测试依赖范围。

使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使

用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候

才需要。

provided: 已提供依赖范围。

使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例

子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提

供,就不需要Maven重复地引入一遍(如:servlet-api)。

runtime: 运行时依赖范围。

使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典

型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试

或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

system: 系统依赖范围。

该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围依赖

时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库

解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。

4. Optional:标记依赖是否可选

5. Exclusions: 用来排除传递性依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值