Maven的安装

一、Maven 简介

Maven 是什么

Maven (opens new window)是一个项目管理工具。将项目开发和管理过程抽象成一个项目对象模型(POM)

Maven是用Java语言书写出来的,它管理的东西统统以面向对象的方式进行设计,最终它把一下项目看成一个对象,而这个对象是POM

POM(Project Object Model) :项目对象模型

通过加载pom.xml配置文件,知道项目信息,这个文件就可以代表一个项目。

项目对象中用什么靠依赖管理(dependence)来帮他做,同时我们做的东西也能变成一个资源被Maven进行管理

那么依赖管理要用到的资源在哪?-->在计算机上-->本地仓库-->私服仓库-->中央仓库(依赖管理的东西是从中央仓库拿到的)

除了依赖管理还能做什么?Maven还可以做项目构建,管理我们整个的开发过程-->构建生命周期/阶段

构建生命周期,运行的时候没有功能,Maven提前做好了一些插件使用插件完成我们的构建生命周期的功能(一个构建过程包含若干个插件,一个插件可以对应若干个构建过程)

插件,会给我们产生出来最终构建的结果,比如jar包、war包,多个插件不同的插件做不同的事情产出不同的东西。

Maven有什么用

传统项目管理容易出现的问题:

1.jar包不统一,jar包不兼容

2.工程升级维护过程操作繁琐

作用:

1.项目构建:提供标准的、跨平台的自动化项目构建方式

2.依赖管理:方便快捷的管理项目依赖的(资源)jar包,避免资源间的版本冲突问题。对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为。

3.统一开发结构:提供标准的、统一的项目结构

Maven 的标准工程结构

Maven 的标准工程结构如下:

|-- pom.xml(maven的核心配置文件) |-- src |-- main |-- java(java源代码目录) |-- resources(资源文件目录) |-- test |-- java(单元测试代码目录) |-- target(输出目录,所有的输出物都存放在这个目录下) |-- classes(编译后的class文件存放处)

0

版本 - maven 有自己的版本定义和规则。

构建 - maven 支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。

输出物管理 - maven 可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。

依赖关系 - maven 对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为

文档和构建结果 - maven 的 site 命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。

项目关系 - 一个大型的项目通常有几个小项目或者模块组成,用 maven 可以很方便地管理。

移植性管理 - maven 可以针对不同的开发场景,输出不同种类的输出结果。

Maven 的生命周期

maven 把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven 中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后 maven 执行的时候,就依照过程的发展依次调用这些 goal 进行各种处理。

这个也是 maven 的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven 同样提供了配置文件,可以依照用户要求,跳过某些阶段。

Maven的简单介绍

Maven 的"约定优于配置"

所谓的"约定优于配置",在 maven 中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是除非必要,并不需要去修改那些约定内容。

每一个阶段的任务都知道怎么正确完成自己的工作,比如 compile 任务就知道从 src/main/java 下编译所有的 java 文件,并把它的输出 class 文件存放到 target/classes 中。

对 maven 来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。

Maven 的版本规范

maven 使用如下几个要素来唯一定位某一个输出物:

  • groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 JAVA 的包的结构。例如 org.apache
  • artifactId - 单独项目的唯一标识符。比如我们的 tomcat, commons 等。不要在 artifactId 中包含点号(.)。
  • version - 一个项目的特定版本。
  • packaging - 项目的类型,默认是 jar,描述了项目打包后的输出。类型为 jar 的项目产生一个 JAR 文件,类型为 war 的项目产生一个 web 应用。

例如:想在 maven 工程中引入 4.12 版本的 junit 包,添加如下依赖即可。

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency>

maven 有自己的版本规范,一般是如下定义 、、- ,比如 1.2.3-beta-01。要说明的是,maven 自己判断版本的算法是 major,minor,incremental 部分用数字比 较,qualifier 部分用字符串比较,所以要小心 alpha-2 和 alpha-15 的比较关系,最好用 alpha-02 的格式。

maven 在版本管理时候可以使用几个特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:

  • SNAPSHOT - 这个版本一般用于开发过程中,表示不稳定的版本。
  • LATEST - 指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个 snapshot 版,具体看哪个时间最后。
  • RELEASE - 指最后一个发布版。

二、Maven 安装

Linux 环境安装可以使用我写一键安装脚本:https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/ops/service/maven

环境准备

Maven 依赖于 Java,所以本地必须安装 JDK。

打开控制台,执行 java -version 确认本地已安装 JDK。

$ java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

下载解压

进入 官网下载地址 (opens new window),选择:apache-maven-3.6.3-bin.zip

Maven 3 档案 

下载好了,上传到网盘了

链接: https://pan.baidu.com/s/1pXFJgPn84cwzOEQkwfAjoA?pwd=1234 提取码: 1234

--来自百度网盘超级会员v2的分享

解压到非中文、没有空格的目录

选择合适版本,下载并解压到本地。解压命令如下:

# 以下解压命令分别针对 zip 包和 tar 包 unzip apache-maven-3.6.3-bin.zip tar xzvf apache-maven-3.6.3-bin.tar.gz

环境变量

添加环境变量 MAVEN_HOME,值为 Maven 的安装路径。

配置 LUnix 系统环境变量

输入 vi /etc/profile ,添加环境变量如下:

# MAVEN 的根路径

export MAVEN_HOME=/opt/maven/apache-maven-3.5.2

export PATH=$MAVEN_HOME/bin:$PATH

执行 source /etc/profile ,立即生效。

配置 Windows 系统环境变量

打开 此电脑->属性->高级系统设置->高级->环境变量, 在系统变量栏中, 选择 Path 进行编辑.

0

0

0

检测安装成功

检验是否安装成功,执行 mvn -v 命令,如果输出类似下面的 maven 版本信息,说明配置成功。

$ mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe) Maven home: /opt/maven/apache-maven-3.5.4 Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /mnt/disk1/jdk1.8.0_191/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"

Maven 配置文件——修改setting.xml

setting.xml 文件是 Maven 的默认配置文件,其默认路径为:/conf/settings.xml。

maven 安装生效之后,还需要对 maven 的 config 文件夹下的文件 settings.xml 进行配置,主要是配置下载 jar 包时的镜像。Maven 下载 jar 包默认访问境外的中央仓库,而国外网站速度很慢。改成阿里云提供的镜像仓库,访问国内网站,可以让 Maven 下载 jar 包的时候速度更快。具体的配置如下:

如果需要修改 Maven 配置,直接修改 setting.xml 并保持即可。

例如:想要修改本地仓库位置可以按如下配置,这样,所有通过 Maven 下载打包的 jar 包都会存储在 D:\maven\repo 路径下。

<!--自定义指定jar包存放的位置--> <localRepository>D:\apache-maven-3.6.3-bin\repository</localRepository> <!--配置具体的仓库的下载镜像--> <mirrors> <mirror> <!--此镜像的唯一标识符,用来区分不同的mirror元素--> <id>alimaven</id> <!--对哪种仓库进行镜像,简单说就是替代哪个仓库--> <mirrorOf>central</mirrorOf> <!--镜像名称--> <name>aliyun maven</name> <!--镜像URL--> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors>

三、快速入门

快速搭建SSM项目

快速搭建springboot项目

四、使用说明

如何添加依赖

在 Maven 工程中添加依赖 jar 包,很简单,只要在 POM 文件中引入对应的标签即可。

0

依赖范围:

0

  • compile 模式 (默认,全过程参与)

默认就是 compile。

compile 需要参与当前项目的编译、测试、运行、打包。

  • provided(编译、测试阶段存在,打包时排除)

provided 只存在编译、运行、测试阶段,打包是不用包括进去,打包阶段做了 exclude 动作,因为别的容器能提供对应的依赖。

应用场景:

定义了一个Servlet,此时需要servlet-api.jar 才能编译成功,但是当你达成war 包时,你并不想将 servlet-api.jar 包进去,因为Tomcat等容器会提供。此时用到 provided 。

provided 只在编译、运行、测试阶段,打包是不用包进去,打包阶段做了排除。

provided 打包的时候可以不用包含进去,因为别的容器(Web Container)会提供。

阿里开发规范文档:如果依赖其它二方库,尽量是 provided 引入,让二方库使用者去依赖具体版本号; 无 log 具体实现,只依赖日志框架。

例如 : 添加 provided ,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat 的时候,就不会冲突了。

<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>1.0-alpha-1</version> <scope>provided</scope> </dependency>

  • runtime 模式(跳过编译,运行和打包参与)

runtime 表示被依赖项目无需参与项目的编译,不过后期的测试、运行和打包周期需要其参与。

与compile相比,runtime 跳过编译而已。

比如,你可能在编译的时候只需要 JDBC API JAR,而只有在运行的时候才需要 JDBC 驱动实现。

编译时该包不参与,运行时参与。

  • test 模式(测试阶段有效)

test 范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。比如

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency>

  • system (依赖于本地目录中,与provided 相似)

system 不是依赖于 maven仓库、本地maven仓库,而是从本地磁盘指定路径下寻找,需要 systemPath 属性。

与 provided 相似,不过不依赖maven仓库,而是从本地文件系统读取。

1)方式1、引入本地磁盘目录下的jar包

<dependency> <!--自定义--> <groupId>com.im</groupId> <!--自定义--> <artifactId>sdk</artifactId> <!--自定义--> <version>1.0</version> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <scope>system</scope> <!--项目根目录下的lib文件夹下--> <systemPath>${basedir}/lib/sdk-1.0.jar</systemPath> </dependency>

2)方式2、编译阶段指定外部 lib

<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.1.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <compilerArguments> <!--指定外部lib--> <extdirs>lib</extdirs> </compilerArguments> </configuration> </plugin>

将外部 jar 导入本地 maven 仓库

有一些收费的,或都其他途径获取的jar 在maven仓库中不存在, 如果想通过maven使用时,可以先将jar导入到本地的maven仓库中,如下:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.5.0 -Dpackaging=jar -Dfile=.\ojdbc14_10.2.0.5.0.jar

再引入jar包:

<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.5.0</version> </dependency>

maven预定义内置属性

${basedir} 表示项目根目录,即包含 pom.xml 文件的目录; ${version} 表示项目版本; ${project.basedir} 同${basedir}; ${project.baseUri} 表示项目文件地址; ${maven.build.timestamp} 表示项目构件开始时间; ${maven.build.timestamp.format} 表示属性 ${maven.build.timestamp} 的展示格式,默认值为 yyyyMMdd-HHmm ,可自定义其格式

如何寻找 jar 包——Maven中央仓库地址

可以在 http://mvnrepository.com/ (opens new window)站点搜寻你想要的 jar 包版本

例如,想要使用 log4j,可以找到需要的版本号,然后拷贝对应的 maven 标签信息,将其添加到 pom .xml 文件中。

scope 的传递依赖

A -> B -> C, 当前项目 A,A依赖于B,B依赖于C,知道B在A中的scope,怎么知道 C在 A 中的 scope, 即,A需不需要 C的问题,本质由 C在B中的scope决定 当 C 在 B 中的scope 是test 或 provided 时,C 直接被丢弃,A不依赖C 否则 A 依赖 C,C的scope 继承与B 的scope

如何使用 Maven 插件(Plugin)

要添加 Maven 插件,可以在 pom.xml 文件中添加  标签。

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build>

 标签用来配置插件的一些使用参数。

Maven常用命令及其作用

0

1、 maven clean:对项目进行清理,删除target目录下编译的内容

2、 maven compile:编译项目源代码

3、 maven test:对项目进行运行测试

4、 maven package:打包文件并存放到项目的target目录下,打包好的文件通常都是编译后的class文件

5、 maven install:在本地仓库生成仓库的安装包,可供其他项目引用,同时打包后的文件放到项目的target目录下

0

Maven 命令

常用 maven 命令清单:

生命周期 阶段描述

mvn validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用

mvn generate-sources 生成所有需要包含在编译过程中的源代码

mvn process-sources 处理源代码,比如过滤一些值

mvn generate-resources 生成所有需要包含在打包过程中的资源文件

mvn process-resources 复制并处理资源文件至目标目录,准备打包

mvn compile 编译项目的源代码

mvn process-classes 后处理编译生成的文件,例如对 Java 类进行字节码增强(bytecode enhancement)

mvn generate-test-sources 生成所有包含在测试编译过程中的测试源码

mvn process-test-sources 处理测试源码,比如过滤一些值

mvn generate-test-resources 生成测试需要的资源文件

mvn process-test-resources 复制并处理测试资源文件至测试目标目录

mvn test-compile 编译测试源码至测试目标目录

mvn test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布

mvn prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在 Maven 2.1+中实现)

mvn package 将编译好的代码打包成可分发的格式,如 JAR,WAR,或者 EAR

mvn pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境

mvn integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境

mvn post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。

mvn verify 执行所有检查,验证包是有效的,符合质量规范

mvn install 安装包至本地仓库,以备本地的其它项目作为依赖使用

mvn deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)

maven介绍和环境配置_maven 环境亦是-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值