阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

Hello,今天给各位童鞋们分享的是Maven,赶紧拿出小本子记下来吧

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

一、Maven介绍

maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。

二、安装Maven环境

2.1 mac环境安装

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

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

将解压好的文件放到/usr/local目录下面

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

配置环境变量,首先去看看 ~/ 目录下面有没有 .bash_profile文件

要是没有 咱们就去创建一个

touch ~/.bash_profile

如果有的话 咱们就直接进入

vi ~/.bash_profile

之后配置一下环境变量

export M=$PATH:/usr/local/apache-maven-3.3.9/bin

ESC一下 然后 :wq保存一下,然后在终端让命令生效一下

source ~/.bash_profile

测试一下环境变量是否已经配置完成。在终端输入一个 mvn -v。如果出现下图则配置成功

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

2.2 windows环境安装

下载并解压 maven 安装程序:

子目录 bin :执行程序,主要是mvn.cmd

conf :maven工具本身的配置文件 settings.xml

配置环境变量

在系统的环境变量中,指定一个MAVEN_HOME的名称, 指定它的值是maven工具安装目录,bin之前的目录

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

系统变量:path=%MAVEN_HOME%/bin;

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

验证,新的命令行中,执行mvn -v

出现如下内容,maven安装,配置正确。

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

三、Maven 的核心概念:

3.1 Maven工程约定目录结构

maven约定的目录结构, 约定是大家都遵循的一个规则。

以Hello的maven项目为例:

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

3.2 POM文件

  1. 基本信息
阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

注意:groupId 、artifactId 、version 三个元素生成了一个Maven 项目的基本坐标,在众多的maven 项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。

依赖 dependencies 和dependency

Maven 的一个重要作用就是管理 jar 包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的 jar 包,在 Maven 中,这些 jar 就被称为依赖,使用标签 dependency 来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven 把所有的 jar 包也都视为项目存在了。

配置属性 properties

properties 是 用 来 定 义 一 些 配 置 属 性 的 , 例 如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。

构建build

build 表示与构建相关的配置,例如设置编译插件的 jdk 版本

继承parent

在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机制,用 parent 声明要继承的父工程的 pom 配置。

聚合modules

在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫 Maven 的聚合。

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

3)仓库的使用,maven仓库的使用不需要人为参与。

开发人员需要使用mysql驱动--->maven首先查本地仓库--->私服--->镜像--->中央仓库

3.3 仓库

在 Maven 的术语中,仓库是一个位置(place)

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件

Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方

Maven 仓库有三种类型 :

本地(local)

远程(remote)

本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建 ,它是在第一次执行 maven 命令的时候才被创建

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件

默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录

修改本地仓库的位置,Maven的conf目录中的settings.xml文件:

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

远程仓库

分为为全世界范围内的开发人员提供服务的中央仓库、为全世界范围内某些特定的用户提供服务的中央仓库镜像、为本公司提供服务自己架设的私服。中央仓库是maven默认的远程仓库,其地址是:https://repo.maven.apache.org/maven2/

中央仓库,包含了绝大多数流行的开源Java构件,以及源码、作者信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载得到。

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

仓库搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库 :

maven首先查本地仓库--->私服--->镜像--->中央仓库

配置阿里云仓库

Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

3.4 maven的常用命令和插件

maven的常用命令:

Maven 提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。

mvn clean 清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)

mvn compile 编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)

mvn test-compile 编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)

mvn test 测试(会生成一个目录surefire-reports,保存测试结果)

mvn package 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)

mvn install 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)

mvn deploy 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)。

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

maven的插件:

maven的插件: maven命令执行时,真正完成功能的是插件,插件就是一些jar文件, 一些类。

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

四、IDEA中使用 Maven

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

推荐配置:设置maven在不联网的情况下使用本地插件

一般使用maven为我们提供好的骨架时,是需要联网的,配置这个,可以在没有网路的情况下,我们可以正常创建工程,并从之前已经使用过的工程中找到相应的骨架。

输入内容:-DarchetypeCatalog=internal

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

创建maven版java工程

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

创建maven版web项目

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

在idea中操作maven项目

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

五、maven常用设置

5.1 依赖的范围

依赖的范围主要包括:compiletestprovided

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

maven的属性设置
设置maven的常用属性

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

5.2 maven的全局变量

自定义的属性:

1.在 通过自定义标签声明变量(标签名就是变量名)

2.在pom.xml文件中的其它位置,使用 ${标签名} 使用变量的值

使用场景:自定义全局变量一般是定义 依赖的版本号, 当你的项目中要使用多个相同的版本号,先使用全局变量定义, 再使用${变量名}

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

5.3 指定资源位置

在build标签中进行配置:

阿里架构师纯手码的Maven项目实战笔记限时分享,确定不拿走?

作用:

默认没有使用resources的时候, maven执行编译代码时, 会把src/main/resource目录中的文件拷贝到target/classes目录中。对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中

当我们执行java程序时,需要用到src/main/java目录中的文件,需要告诉maven在mvn compile src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中。此时就需要在中加入

好啦,今天的文章就到这里了,希望能够帮助到屏幕前迷茫的你们

展开阅读全文

页面更新:2024-04-27

标签:项目   主程序   阿里   构件   坐标   仓库   实战   插件   环境变量   模块   命令   位置   中央   文件   测试

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top