Maven 安装与配置

1. Maven 介绍

Maven 翻译为 “专家”,“内行”。Maven 是 Apache 下的一个纯 Java 开发的开源项目,它是一个项目管理工具,使用 Maven 对 Java 项目进行构建、依赖管理。

1.1 什么是项目构建

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

Maven 将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段,后面章节详细介绍每个阶段,这里先大概了解下:

上图中部分阶段对应命令如下:

  1. 清理阶段对应 Maven 的命令是 clean,清理输出的 class 文件
  2. 编译阶段对应 Maven 的命令是 compile,将 Java 代码编译成 class 文件。
  3. 打包阶段对应 Maven 的命令是 package,Java 工程可以打成 jar 包,web 包可以打成 war 包

运行一个 Maven 工程(web工程)需要一个命令:tomat:run

Maven 工程构建的优点:

  1. 一个命令完成构建、运行,方便快捷。
  2. Maven 对每个构建阶段进行规范,非常有利于大型团队协作开发。

1.2 什么是依赖管理

Maven 项目管理所依赖的 jar 包不需要手动向工程添加 jar 包,只需要在 pom.xml(Maven 工程的配置文件)添加 jar 包的坐标,自动从 Maven 仓库中下载 jar 包、运行,如下图:

使用 maven 依赖管理添加 jar 的好处:

  1. 通过 pom.xml 文件对 jar 包的版本进行统一管理,可避免版本冲突。
  2. Maven 团队维护了一个非常全的 Maven 仓库,里边包括了当前使用的 jar 包,Maven 工程可以自动从 Maven 仓库下载 jar 包,非常方便。

1.3 使用 Maven 的好处

通过上边介绍传统项目和 Maven 项目在项目构建及依赖管理方面的区域,Maven 有如下的好处:

  1. 一步构建。Maven 对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
  2. 依赖管理。Maven 工程不用手动导 jar 包,通过在 pom.xml 中定义坐标从 Maven 仓库自动下载,方便且不易出错。
  3. Maven 的跨平台,可在 window、linux 上使用。
  4. Maven 遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用 Maven 来构建项目。

2. Maven 的安装与配置

Maven 是基于 Java 开发的,无论是 Windows 上还是 Linux 上直接解压即可,前提是已经安装有 JDK。安装完成后需要配置环境变量:

JAVA_HOME:D:\Program Files\Java\jdk1.8.0_91
MAVEN_HOME:D:\Maven\apache-maven-3.5.0

3. Maven 目录结构介绍

3.1 MAVEN_HOME

bin
boot
conf
lib
LICENSE
NOTICE
README.txt
  • bin 该目录包含了 mvn 运行的脚本,这些脚本用来配置 Java 命令,准备好 classpath 和相关的 Java 系统属性,然后执行 Java 命令。其中 mvn 是基于 UNIX 平台的 shel 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输人任何一条 mvn 命令时,实际上就是在调用这些脚本。该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。那么 mvn 和 mvnDebug 有什么区别呢?打开文件我们可以看到,两者基本上是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启 debug,以便调试 Maven 本身。此外,该目录还包含 m2.conf 文件,这是 clssworlds 的配置文件,后面会介绍 classworlds。

  • boot 该目录只包含一个文件,以 maven3.5.0 为例,该文件为 plexus-classworlds-2.5.2.jar。plexus-classworlds 是一个类加载器框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置, Maven 使用该框架加载自己的类库。对于一般的 Maven 用户来说,不必关心该文件。

  • conf 该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。一般情况下,我们更偏向于复制该文件至 ~/.m2/ 目录下(~表示用户目录),然后修改该文件,在用户范围定制 Maven 的行为。后面将会多次提到 settings.xml,并逐步分析其中的各个元素。

  • lib 该目录包含了所有 Maven 运行时需要的 Java 类库,Maven 本身是分模块开发的,因此用户能看到诸如 maven-core-3.5.0.jar、 maven-model-3.5.0.jar 之类的文件。此外,这里还包含一些 Maven 用用到的第三方依赖,如 commons-cli-1.4.jar。可以说,lib 目录就是真正的 Maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到 Maven 内置的超级 POM,这一点在 8.5 节详细解释。

  • 其他: LICENSE.txt 记录了 Maven 使用的软件许可证 Apache License Version2.0;NOTICE.txt 记录了 Maven 包含的第三方软件;而 READMIE.txt 则包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

3.2 ~/.m2

在讲述该小节之前,我们先运行一条简单的命令: mvn help: system。该命令会打印出所有的 Java 系统属性和环境变量,这些信息对我们日常的编程工作很有帮助。这里暂不解释 help:system 涉及的语法,运行这条命令的目的是让 Maven 执行一个真正的任务。我们可以从命令行输出看到 Maven 会下载 maven-help-plugin,包括 pom 文件和 jar 文件。这些文件都被下载到了 Maven 本地仓库中。

默认情况下,.m2 文件夹下放置了 Maven 本地仓库 .m2/repository。所有的 Maven 构件都被存储到该仓库中,以方便重用。可以到 ~/.m2/repository/org/apache/maven/plugins/maven-help-plugins 目录找到刚才下载的 maven-help-plugins 的 pom 文件和 jar 文件。 Maven 根据一套规则来确定任何一个构件在仓库中的位置,这一点在第 6 章交付详细阐述。

默认情况下,~/.m2 目录下除了 repository 仓库之外就没有其他目录和文件了,不过大多数 Maven 用户需要复制 MAVEN_HOME/conf/settings.xml 文件到 ~/.m2/settings.xml。这是条最佳实践,我们将在 3 小节详细解释。

4. 设置 HTTP 代理

有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的代理访问因特网。这种情况下,就需要为 Maven 配配置 HTTP 代理,才能让它正常访问外部仓库,以下载所需要的资源。首先确认自己无法直接访问公共的的 Maven 中央仓库,直接运行命令 ping repo.maven.org 可以检查网络。如果真的需要代理,先检査一下代理服务器是否畅通。比如现在有一个 IP 地址为 218.14.227.197,端口为 3128 的代理服务,我们可以运行 telnet 218.14.227.197 3128 来检测该地址的该端口是否畅通。如果得到出错信息,需要先获取正确的代理服务信息;

检查完毕之后,编辑 ~/.m2/settings.xml 文件。添加代理配置如下:

<proxy>
<id>my-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>218.14.227.197</host>
<port>3128</port>
<!-- <username>proxyuser</username>
<password>proxypass</password>
<nonProxyHosts>local.net|some.host.com|*.google.com</nonProxyHosts> -->
</proxy>

这段配置十分简单, proxies 下可以有多个 proxy 元素,如果声明了多个 proxy 元素,则默认情况下第一个被激活的 proxy 会生效。这里声明了一个 id 为 my-proxy 的代理, active 的值为 true 表示激活该代理, protocol 表示使用的代理协议,这里是 http。当然,最重要的是指定正确的主机名(host元素)和端口(port元素)。上述 XML 配置中注释掉了 username、password、 nonProxyHosts 几个元素。当代理服务需要认证时,就需要配置 username 和 password。nonProxyHosts 元素用来指定哪些主机名不需要代理,可以使用 "|" 符号来分隔多个主机名。此外,该配置也支持通配符,如 *.google.com 表示所有以 google.com 结尾的域名不需要代理。

5. maven 安装最佳实践

本节介绍一些在安装 Maven 过程中不是必须的,但十分有用的实践。

5.1 设置 MAVEN_OPTS 环境变量

前面介绍 Maven 安装目录时我们了解到,运行 mvn 命令实际上是执行了Java 命令,既然是运行 Java,那么运行 Java 命令可用的参数当然也应该在运行 mvn 命令时可用。这个时候, MAVEN_OPTS 环境变量就能派上用场。

通常需要设置 MAVEN_OPTS 的值为 -Xms128m -Xmx512m,因为 Java 默认的最大可用内存往往不能够满足 Maven 运行的需要,比如在项目较大时,使用 Maven 生成项目站点需要占用大量的内存,如果没有该配置,则很容易得到 java.lang.OutOfMemeoryError。因此,开始就配置该变量是推荐的做法。

关于如何设置环境变量,请参考前面设置 MAVEN_HOME 环境变量的做法,尽量不要直接修改 mvn.bat 或者 mvn 这两个 Maven 执行脚本文件。因为如果修改了脚本文件,升级 Maven 时就不得不再次修改,一来麻烦,二来容易忘记。同理,应该尽可能地不去修改任何 Maven 安装目录下的文件。

5.2 配置用户范围 settings.xml

Maven 用户可以选择配置 $MAVEN_HOME/conf/settings.xml 或者 ~/.m2/settings.xml。前者是全局范围的,而后者是用户范围的。Maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

推荐使用用户范围的 settings.xml,主要是为了避免无意识地影响到系统中的其他用户。如果有切实的需求,需要统一系统中所有用户的 settings.xml 配置,当然应该使用全局范围的 settings.xml。

除了影响范围这一因素,配置用户范围 settings.xml 文件还便于 Maven 升级。直接修改 conf 目录下的 settings.xml 会导致 Maven 升级不便,每次升级到新版本的 Maven,都需要复制 settings.xml 文件。如果使用 ~/.m2 目录下的 settings.xml,就不会影响到 Maven 安装文件,升级级时就不需要触动 settings.xml 文件。

5.3 不要使用IDE内嵌的 Maven

01 Maven 安装与配置的更多相关文章

  1. ③---Java项目管理工具MAVEN安装与配置

    Java项目管理工具MAVEN安装配置以下将为大家介绍Java项目管理工具MAVEN安装及其配置. 一.下载MAVEN安装文件 maven下载地址:https://maven.apache.org/d ...

  2. Mac下Maven安装与配置

    Mac下Maven安装与配置 下载maven http://maven.apache.org/download.cgi main->download菜单下的Files 下载后解压在Documen ...

  3. Maven安装、配置及基础

    简介: Maven是Apache公司的开源项目,是项目构建工具,用来管理依赖. Maven的优点: 同样的代码实现相同的功能,Maven项目没有Jar包,项目大小更小. maven的优点如何实现: 没 ...

  4. [Java] Maven 安装和配置

    1. 下载 Maven 在百度输入 Maven 搜索 ,找到它的官网(http://maven.apache.org/),点击进入下载页面. 下载页面地址: http://maven.apache.o ...

  5. maven安装和配置

    一.下载maven maven下载页 里面有一些版本区别,binary比较小,适合直接在项目中使用,source带了源代码,windows系统下载zip后缀的 apache-maven-3.3.9-b ...

  6. maven - 安装与配置

    最近在了解maven的相关东西,在网上查了一些资料,现在简单整理一下. 一.maven 安装 1.先检查JDK ,Maven是一个java工具,所以请确保jdk环境已经正确安装在你的机器上. 2.点击 ...

  7. Maven安装与配置

    下载: 1.从官网http://maven.apache.org中下载,下载下来的是一个压缩包,解压即可.因为Maven本身也是用Java实现的.2.Maven的目录结构   /bin; maven的 ...

  8. Windows下的maven安装及配置

    有时候开发需要用到maven来进行项目管理,说下怎么配置maven吧 环境&工具: windows系统 jdk1.8 apache-maven-3.2.5.zip eclipse 首先需要去A ...

  9. maven安装与配置(第一天学习笔记)

    Maven下载:http://maven.apache.org/ 1.首先要确保JDK已经安装与配置(注意:用的是apache-maven-3.3.3的JDK1.6不行,我用的是JDK1.8) 2.把 ...

随机推荐

  1. centos6.5 64安装ffmpeg过程支持转码mp3

    百度了几个文章 大致知道了思路 首先yum源安装是木有的,只能编译安装了. 要安装ffmpeg要先安装一个yasm支持汇编优化(FFmpeg需要) 在安装一个lame,支持mp3的转码 那就是需要3步 ...

  2. yii 执行sql

    sql         $sql = "SELECT ".join(',', $this->search_fields_channel)." FROM {{chan ...

  3. bootStrap 教程 文档

    参考1: https://www.w3schools.com/bootstrap/default.asp 参考1:http://www.runoob.com/bootstrap/bootstrap-i ...

  4. [ilink32 Error] Error: Unresolved external 'SendARP'

    [ilink32 Error] Error: Unresolved external 'SendARP' referenced from E:\APPOBJ\KSRGETMAC.OBJ #pragma ...

  5. as3 文档类判断是否被加载

    if (!stage) { trace(("被加载->this.parent:" + this.parent)); }else { trace(("单独打开-> ...

  6. vscode 习惯配置

    { "gitlens.advanced.messages": { "suppressShowKeyBindingsNotice": true }, " ...

  7. python内存泄漏

    记录: 一个脚本在连续运行后,使用内存越来越大,在循环后手动添加gc.collect()没有作用. 尝试方法: 去除所有函数中当作参数传入的全局变量 使用全局redis对象,不再当作参数传入 循环末尾 ...

  8. 解决IE下载 apk/ipa 变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    解决IE apk/ipa变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Da ...

  9. AutoConfig工具使用

    下载安装Auto工具包: http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoconfig/1.0.9/ant ...

  10. ADO接口简介

    源地址:http://blog.csdn.net/xiaobai1593/article/details/7449151 参考: 1. 百度文库:http://wenku.baidu.com/view ...